Qt |
您所在的位置:网站首页 › tablewidget添加图片 › Qt |
Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别目录Qt | QListView、QListWidget、QTableView、QTableWidget的使用示例及区别1、简介2、使用示例1、QListView2、QTableView3、QListWidget4、QTableWidget1、简介 QListView、QListWidget是列表形式展示的控件。 QTableView、QTableWidget是表格形式展示控件。 继承关系:带Widget的继承自View,即:QListWidget是继承QListView,QTableWidget继承自QTableView。 区别:QListView是基于Model,而QListWidget基于Item。这是它们的本质区别。QTableView、QTableWidget同理。 由于QListView和QTableView是基于model的,需要自己来建模(例如建立QStringListModel、QSqlTableModel等),保存数据,这样就大大降低了数据冗余,提高了程序的效率,以及能更方便的进行我们自己需要展示的内容,但是需要我们对数据建模有一定了解。 而QListWidget相当于是QListView的升级版,它已经自己为我们建立了一个数据存储模型(QListWidgetItem),操作方便,直接调用addItem即可添加项目(ICON,文字)。QTableView、QTableWidget同理。 2、使用示例这四个类共有的一些设置包括: 交替行颜色显示:void setAlternatingRowColors(bool enable);设置选中模式:void setSelectionMode(QAbstractItemView::SelectionMode mode);设置视图模式,包含列表模式和图标模式:void setViewMode(ViewMode mode);1、QListView向QListView中添加条目需借助QAbstractListModel,这里我使用字符串列表模型(QStringListModel)进行示例。 // 设置string模型 QStringListModel* strListModel = new QStringListModel(this); ui->listView->setModel(strListModel);// 设置选中模式为扩展模式,即可多选也可单选 ui->listView->setSelectionMode(QListView::ExtendedSelection); // 设置显示 QStringList strList = {"listview1", "listview2", "listview3"}; qobject_cast(ui->listView->model())->setStringList(strList); // 如果内容有变化需要更新显示,就重新setStringList strList.append("listview4"); qobject_cast(ui->listView->model())->setStringList(strList); // 获取QListView当前的列表内容:首先需要获得QListView的model,通过model获取StringList QStringListModel* m = qobject_cast(ui->listView->model()); QStringList items = m->stringList(); 效果图: 2、QTableView3、QListWidgetQListWidget使用起来更简单,直接使用addItem添加即可。 // 设置选中模式 ui->listWidget->setSelectionMode(QListWidget::ExtendedSelection);// 添加一项 ui->listWidget->addItem("listwidget1"); // 添加一项(带图标) ui->listWidget->addItem(new QListWidgetItem(QIcon(QPixmap(100, 100)), "listwidget2")); 效果图: QListWidget添加条目比较简单,但是删除需要额外注意! QListWidget提供了两个函数:removeItemWidget和takeItem,两者的区别: removeItemWidget:只是删除该item对应的widget,不会删除该item,如果这个item存在内容还是会保留显示takeitem直接删除该itemclear函数清除所有的item所以,如果想真正的删除一项,需要使用takeitem。 在使用takeitem时有两点需要注意: 该函数执行成功会返回一个QListWidgetItem对象,并且需要手动的delete,若执行失败则返回nullptr每成功的执行一次takeitem,列表内容的索引都会重新更新。以下示例为删除选中的item: while(true) // 循环删除单个就是多删除 { // 当前选中项的index QModelIndexList l = ui->listWidget->selectionModel()->selectedIndexes();if(l.isEmpty()) break; // 从QListWidget中删除item QListWidgetItem* item = ui->listWidget->takeItem(l[0].row()); // 必须释放item delete item; } 4、QTableWidget// 设置水平拉伸显示,这样比较好看 ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);// 设置行数 ui->tableWidget->setRowCount(3); // 设置列数 ui->tableWidget->setColumnCount(3); // 设置垂直表头 ui->tableWidget->setVerticalHeaderLabels({"1月", "2月", "3月"}); // 设置水平表头 ui->tableWidget->setHorizontalHeaderLabels({"班级一", "班级二", "班级三"}); 效果: 添加数据: // 设置数据 ui->tableWidget->setItem(0, 0, new QTableWidgetItem("item11")); ui->tableWidget->setItem(1, 0, new QTableWidgetItem("item21"));// 设置数据 QTableWidgetItem* item = new QTableWidgetItem("item12"); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // 居中显示 item->setFlags(Qt::ItemIsEnabled); // 设置为不可编辑 ui->tableWidget->setItem(0, 1, item); 效果: 将单元格设置成QComboBox,使单元格支持下拉选择: // 将单元格设置成QComboBox QComboBox* comboBox = new QComboBox(); comboBox->addItems({"abc", "def"}); ui->tableWidget->setCellWidget(0, 2, comboBox);效果: 修改单元格内容: // 修改数据,修改前注意要检查修改的这个单元格有没有item QTableWidgetItem* channgeItem = ui->tableWidget->item(0, 0); if(channgeItem) { channgeItem->setText(channgeItem->text() + "-channged"); }获取单元格内容: // 获取普通单元格的数据 qDebug() tableWidget->item(0, 0)->text();// 获取QComboBox单元格的数据 qDebug() tableWidget->cellWidget(0, 2))->currentText(); 删除单元格内容: // 删除单元格 QTableWidgetItem* deleteItem = ui->tableWidget->takeItem(0, 0); if(deleteItem) { delete deleteItem; }ends…
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |