- QListWidget
- QTreeWidget
- QTableWidget
item widgets 是基于item的,是把控件直接使用addWidget(xxx)加进去的
一. QTableWidget
自动调整表格的行高和列宽:
resizeColumnsToContents(): 自动调整所有列的宽度resizeColumnToContents(int column): 自动调整列号为column的宽度resizeRowsToContents(): 自动调整所有行的高度resizeRowToContents(int row): 自动调整行号为row的高度
1. 设置表头
QTableWidgetItem *headerItem;QStringList headerList;headerList << "姓 名" << "性 别" << "出生日期" << "民 族" << "分 数" << "是否党员";ui->tableWidget->setColumnCount(headerList.count());for (int i=0; i<ui->tableWidget->columnCount(); i++) {headerItem = new QTableWidgetItem(headerList.at(i));QFont font = ui->tableWidget->font();font.setBold(true);font.setPointSize(12);headerItem->setFont(font);headerItem->setTextColor(Qt::red);ui->tableWidget->setHorizontalHeaderItem(i, headerItem);}
2. 添加一行
// 自定义单元格Type的类型,在创建单元格的item时使用enum CellType {ctName=10001, ctSex, ctBirth, ctNation, ctScore, ctPartyM};// 各字段在表格中的列号enum FieldColNum {colName=0, colSex, colBirth, colNation, colScore, colPartyM};
QTableWidgetItem *item;// nameitem = new QTableWidgetItem(name, ctName);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);item->setData(Qt::UserRole, StudID++);ui->tableWidget->setItem(rowNo, colName, item);// sexitem = new QTableWidgetItem(sex, ctSex);QIcon icon;if (sex == "男")icon.addFile(":/images/images/Male-1.png");elseicon.addFile(":/images/images/female.png");item->setIcon(icon);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colSex, item);// birthitem = new QTableWidgetItem(birth.toString("yyyy-MM-dd"), ctBirth);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colBirth, item);// nationitem = new QTableWidgetItem(nation, ctNation);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colNation, item);// scoreitem = new QTableWidgetItem(QString::number(score), ctScore);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tableWidget->setItem(rowNo, colScore, item);// partyitem = new QTableWidgetItem("党员", ctPartyM);if (isPM)item->setCheckState(Qt::Checked);elseitem->setCheckState(Qt::Unchecked);item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);item->setBackgroundColor(Qt::yellow);item->setTextColor(Qt::black);ui->tableWidget->setItem(rowNo, colPartyM, item);
3. 设置表头是否显示
ui->tableWidget->horizontalHeader()->setVisible(true/false);ui->tableWidget->verticalHeader()->setVisible(true/false);
4. 设置选择方式
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // 行选ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems); //单元格选
二. QDockWidget
- 可以停靠的控件。
- 它是一个容器,把其它的控件放在里面就好
三. QTreeWidget
- 获取被选中的 item:
QTreeWidgetItem *cItem = ui->treeWidget->currentItem();
- 获取最顶级的 item:
QTreeWidgetItem *topItem = ui->treeWidget->topLevelItem(ui->treeWidget->topLevelItemCount()-1);
- 获取父级节点:
QTreeWidgetItem *cItem = ui->treeWidget->currentItem();QTreeWidgetItem *parItem = parItem = cItem->parent();
- 动态添加 item:
// 目录树列的编号定义enum treeItemType{itTopItem=1001,itGroupItem,itImageItem};enum treeColNum{colItem=0, colItemType=1}; // 枚举类型,表示列号// 每个行节点都有两列QTreeWidgetItem *item = new QTreeWidgetItem(itImageItem);QIcon icon(":/images/images/pic.png");item->setIcon(colItem, icon);item->setText(colItem, fileName);item->setText(colItemType, "type:image");item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsAutoTristate|Qt::ItemIsEnabled|Qt::ItemIsUserCheckable);item->setCheckState(colItem, Qt::Checked);item->setData(colItem, Qt::UserRole, file);parItem->addChild(item);
四. QListWidget
- 动态插入 item:
QIcon icon(":/images/images/point.png");QListWidgetItem *item = new QListWidgetItem("Item X");item->setIcon(icon);item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);ui->listWidget->insertItem(ui->listWidget->currentRow(), item);// 或者 添加// ui->listWidget->addItem(item);
- 动态调整 listWidget 高度:
for (int i=0; i<mAttachFilePath.count(); i++) {QListWidgetItem *item = new QListWidgetItem(mAttachFilePath[i]);item->setFlags(Qt::ItemIsSelectable |Qt::ItemIsEnabled);ui->listWidgetAttachment->addItem(item);}ui->listWidgetAttachment->setFixedHeight(ui->listWidgetAttachment->sizeHintForRow(0) *ui->listWidgetAttachment->count() +2 * ui->listWidgetAttachment->frameWidth());
- 右键菜单:
- 默认情况下是出不来的,需要在 Designer 中设置:
contextMenuPolicy: CustomContextMenu - 实现SLOT:
customContextMenuRequested:
QMenu *menuList = new QMenu(this); // 创建菜单// 添加Actions创建菜单项menuList->addAction(ui->actListIni);menuList->addAction(ui->actListClear);menuList->addAction(ui->actListInsert);menuList->addAction(ui->actListAppend);menuList->addAction(ui->actListDel);menuList->addSeparator();menuList->addAction(ui->actSelAll);menuList->addAction(ui->actSelNone);menuList->addAction(ui->actSelInvs);menuList->exec(QCursor::pos()); // 在鼠标光标位置显示右键菜单delete menuList; // 手工创建的指针必须手工删除
