列表控件列表表格树笔记
目录
QListWidget
- selecttionMode 单选多选(ExtendSelection常用)
- flow 从上到下还是从左到右
- gridSize 每一行的宽度
- iconSize 图标的宽度
- QListWidget插入数据
//清空界面设计器添加的数据 ui.listWidget->clear(); //插入数据的多种方法 QListWidgetItem *item1 = new QListWidgetItem; item1->setText(QString::fromLocal8Bit("测试数据1")); ui.listWidget->insertItem(0, item1); new QListWidgetItem("test item 2 ", ui.listWidget); ui.listWidget->addItem("test item 3"); //插入包含图标的数据 QListWidgetItem *itemIcon = new QListWidgetItem; itemIcon->setText("test item icon 4"); itemIcon->setIcon(QIcon("test.jpg")); ui.listWidget->addItem(itemIcon);
- 遍历列表
//遍历列表 for (int i = 0; i < ui.listWidget->count(); i++) { qDebug()<<ui.listWidget->item(i)->text(); }
- 设置为可编辑状态
//设置为可编辑状态 //所有事件都激发编辑 双击 选择 选项变化 ui.listWidget->setEditTriggers(QAbstractItemView::AllEditTriggers); for (int i = 0; i < ui.listWidget->count(); i++) { ui.listWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); }
- 排序
void QListWidgetTest::Sort() { static bool isDesc = false; if (!isDesc) { ui.listWidget->sortItems(Qt::DescendingOrder); } else { ui.listWidget->sortItems(Qt::AscendingOrder); } isDesc = !isDesc; }
- 添加其他控件
//显示QLineEdit控件 QLineEdit *e = new QLineEdit("Test Line Edit"); ui.listWidget->setItemWidget(ui.listWidget->item(4), e); //显示QSpinBox控件 QSpinBox * s = new QSpinBox(); ui.listWidget->setItemWidget(ui.listWidget->item(5), s);
QTableWidget
- 属性
- 通过ui界面属性设置
- 在Header属性中设置最后一列是否拉伸填充,每列默认大小,最小宽度,是否排序,选中是否高亮。
- 插入标题
- 插入水平标题
//清空所有标题和内容 ui.tableWidget->setColumnCount(0); ui.tableWidget->setRowCount(0); //插入水平标题 ui.tableWidget->setColumnCount(5); ui.tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Head1")); ui.tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem); ui.tableWidget->horizontalHeaderItem(1)->setText("Head2"); ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("H3")); //插入标题,会清理之前的对象 ui.tableWidget->setHorizontalHeaderItem(2, new MyHead("Head3")); ui.tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Head4")); ui.tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("Head5"));
- 插入垂直标题
//设定标题列的宽度 ui.tableWidget->setColumnWidth(0, 200); //设置垂直标题 ui.tableWidget->setRowCount(3); QStringList list = { "row1","row2","row3" }; //list.push_back("col1"); ui.tableWidget->setVerticalHeaderLabels(list);
- 插入数据
- 插入数据
//插入数据 ui.tableWidget->setItem(0, 0, new QTableWidgetItem("col 0,0")); ui.tableWidget->setItem(0, 1, new QTableWidgetItem("col 0,1")); ui.tableWidget->setItem(0, 2, new QTableWidgetItem("col 0,2")); ui.tableWidget->setItem(1, 0, new QTableWidgetItem("col 1,0")); ui.tableWidget->setItem(2, 0, new QTableWidgetItem("col 2,0"));
- 超过设置的setRowCount(3)数,使用insert添加行
//结尾添加一行 int row = ui.tableWidget->rowCount(); ui.tableWidget->insertRow(row); ui.tableWidget->setItem(row, 0, new QTableWidgetItem("new row 4")); //开始添加一行 ui.tableWidget->insertRow(0); ui.tableWidget->setItem(0, 0, new QTableWidgetItem("new row 0"));
- 插入QIcon 图片
ui.tableWidget->setItem(0, 1, new QTableWidgetItem("new row 1")); ui.tableWidget->item(0, 1)->setIcon(QIcon("test.jpg")); //设置行高 ui.tableWidget->setRowHeight(0,80); //设置图标显示大小 ui.tableWidget->setIconSize(QSize(ui.tableWidget->rowHeight(0), ui.tableWidget->rowHeight(0)));
- 插入widget 图片
QLabel *img = new QLabel(); QPixmap pix("test.jpg"); //缩放到和表格单元的宽高一致 pix = pix.scaled(ui.tableWidget->columnWidth(0),ui.tableWidget->rowHeight(row)); img->setPixmap(pix); ui.tableWidget->setCellWidget(row, 0, img);
- 数据删除
void QTableWidgetTest::Del() { //空行无法选择 QList<QTableWidgetItem*> items = ui.tableWidget->selectedItems(); for (int i = 0; i < items.size(); i++) { qDebug() <<items[i]->row()<<":"<<items[i]->column()<<" text="<< items[i]->text(); } //选择模式器 QItemSelectionModel *smodel = ui.tableWidget->selectionModel(); //获取所有的选择索引 QModelIndexList slist = smodel->selectedIndexes(); //获取所有被选中的行号 std::set<int> rows; for (int i = 0; i < slist.size(); i++) { //重复的插入失败 rows.insert(slist[i].row()); } //给用户提示 QString msg = QStringLiteral("您确认删除:"); for (std::set<int>::iterator itr = rows.begin(); itr != rows.end(); itr++) { QTableWidgetItem *item = ui.tableWidget->item(*itr, 0); msg += "["; msg += QString::number(*itr+1); msg += ":"; if (item) msg += item->text(); msg += "]"; } int re = QMessageBox::information(this, "", msg, QStringLiteral("确认"), QStringLiteral("取消")); if (re != 0) { return; } //删除多行 for (;;) { //获取所有的选择索引 QModelIndexList s = smodel->selectedIndexes(); if (s.size() <= 0) break; //每次只删除一行 ui.tableWidget->removeRow(s[0].row()); } }
QTreeWidget
- 清理标题和数据
//清理测试的标题,不清理数据 //ui.treeWidget->setColumnCount(0); //不会清理 ui.treeWidget->setHeaderItem(new QTreeWidgetItem()); //清理测试数据 ui.treeWidget->clear(); //设置标题,设置四列 ui.treeWidget->headerItem()->setText(0, QStringLiteral("标题1")); ui.treeWidget->headerItem()->setText(1, "head2"); ui.treeWidget->headerItem()->setText(2, "head3"); ui.treeWidget->headerItem()->setText(3, "head4"); //ui.treeWidget->headerItem()->setText(5, "head4"); qDebug() << "ColumnCount" << ui.treeWidget->columnCount();
- 数据插入顶级节点
//结尾处插入 ui.treeWidget->addTopLevelItem(new QTreeWidgetItem()); ui.treeWidget->topLevelItem(0)->setText(0,"tree node1"); ui.treeWidget->topLevelItem(0)->setText(1, "tree node1 col2"); ui.treeWidget->addTopLevelItem(new QTreeWidgetItem({"tree node2 col1","tree node2 col2"}));
//开头插入 ui.treeWidget->insertTopLevelItem(0, new QTreeWidgetItem({ "tree node1-1 col1","tree node1-1 col2" })); //结尾插入 ui.treeWidget->insertTopLevelItem(ui.treeWidget->topLevelItemCount(), new QTreeWidgetItem({ "tree node end col1" })); //结尾插入 QTreeWidgetItem *node = new QTreeWidgetItem(ui.treeWidget); node->setText(0, "new ");
- 子节点 操作
- 插入图标
ui.treeWidget->setIconSize(QSize(60, 60)); ui.treeWidget->topLevelItem(0)->setIcon(0, QIcon("test.jpg"));
- 插入Widget控件
QPushButton *bu = new QPushButton("Test"); ui.treeWidget->setItemWidget(ui.treeWidget->topLevelItem(1), 0, bu);