什么是QListWidget
QListWidget是 Qt 框架中用于显示列表的一个类,列表中的项可以是简单的字符串,也可以带有图标,用户可以查看、增加、删除、修改项,可以进行点击等操作进行交互,总之,QListWidget功能很强大,可以满足列表数据中的各种需求。
界面设置QListWidget
打开一个空白页面,在左侧找到 List Widget 控件拖拽到页面中,调整下大小
双击List Widget,弹出编辑列表内容的窗口,点击 + ,可以增加列表项
预览看到列表的数据正常展示
QListWidget的属性
QListWidget的属性有两个,currentRow 代表当前选项的索引(从0开始),sortingEnabled 代表是否排序
列表项也可以单独设置属性,双击再次打开编辑列表项的窗口,选中其中一个项,再点击属性,可以看到支持编辑的属性有很多,Selectable默认是选中的,所以列表项可选,Editable是否可编辑等
选择Editable、checkState选择Checked,再预览,可以看到这个列表项前面多了一个多选框,列表项的值还可以编辑
更多属性用法在QT助手中查询
代码实现QListWidget
我们来看下用代码如何实现这个页面
1、创建一个QWidget的主窗体,在.cpp的文件中添加如下代码
QHBoxLayout *horizontalLayout = new QHBoxLayout;
QListWidget *listWidget = new QListWidget;
QListWidgetItem *item1 = new QListWidgetItem("第一个数据");
QListWidgetItem *item2 = new QListWidgetItem("第二个数据");
QListWidgetItem *item3 = new QListWidgetItem("第三个数据");
listWidget->addItem(item1);
listWidget->addItem(item2);
listWidget->addItem(item3);
listWidget->setCurrentRow(-1);
QWidget *widget = new QWidget;
QHBoxLayout *horizontalLayout_2 = new QHBoxLayout;
QLabel *label = new QLabel(widget);
label->setText("主窗体");
horizontalLayout_2->addWidget(label);
widget->setLayout(horizontalLayout_2);
horizontalLayout->addWidget(listWidget);
horizontalLayout->addWidget(widget);
horizontalLayout->setStretch(1, 4);
this->setLayout(horizontalLayout);
// 窗口的大小及位置,左上角坐标(300, 300),宽度1600,高度1000
this->setGeometry(QRect(300, 300, 1600, 1000));
2、通过 工具 -- 界面编辑器 -- 预览
3、如果想让列表项前显示多选框,且第一个项的内容可以编辑,加入如下代码
item1->setCheckState(Qt::Checked);
item1->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
item2->setCheckState(Qt::PartiallyChecked);
item3->setCheckState(Qt::PartiallyChecked);
4、通常点击列表项都会触发一些操作,例如刷新数据,这个仍需要用到信号和槽机制来实现,这里我们实现一下,点击列表项,改变右侧label的值这个操作
第一步:在.h文件中,使用slots来声明一个槽函数onItemClicked,要修改的对象label定义成全局对象
第二步:在.cpp文件中实现槽函数,并添加连接信号和槽的connect函数,点击列表项触发的信号是&QListWidget::itemClicked事件
5、这样就可以实现点击列表改变label的值了