ListWidget列表框组件,该组件与TreeWidget有些相似,区别在于TreeWidget可以实现嵌套以及多字段结构,而ListWidget组件则只能实现单字段结构,ListWidget组件常用于显示单条记录,例如只显示IP地址,用户名等数据,如下笔记是本人在开发中经常用到的一些基本操作技巧,包括列表框组件的基本操作方法。 常用节点间的操作方法如下:ListView组件与应用基础ListWidget初始化ListWidget变化行(触发事件)ListWidget编辑状态设置ListWidget全选全不选ListWidget反选(对错交织)ListWidget指定位置插入增加一项ListWidget删除选中项 ListView组件与应用基础:该组件与ListWidget功能一致,只是ListView无法实现编辑只能预览。includemainwindow。hincludeuimainwindow。hincludeQListViewincludeQStandardItemincludeQStringListModelMainWindow::MainWindow(QWidgetparent):QMainWindow(parent),ui(newUi::MainWindow){uisetupUi(this);}MainWindow::MainWindow(){}初始化View组件向ListView组件中填充数据By:LySharkhttps:www。cnblogs。comlysharkvoidMainWindow::onpushButtonclicked(){QStringLQStringListM追加数据到ListView中dataQString(192。168。1。1);dataQString(192。168。1。2);dataQString(192。168。1。3);dataQString(192。168。1。4);modelnewQStringListModel(data);uilistViewsetModel(model);移除第1个地址data。removeAt(0);再次刷新ListViewmodelnewQStringListModel(data);uilistViewsetModel(model);}实现间隔初始化,每一行一种颜色voidMainWindow::onpushButton2clicked(){QStringLQStandardItemModelmodelnewQStandardItemModel();清空记录modelremoveRows(0,modelrowCount());追加数据到ListView中dataQString(192。168。1。1);循环追加for(intx2;x5;x){dataQString(192。168。1。0)。arg(x);}输出到ListView记录intnCountdata。size();for(intx0;xnCx){QStringstringstaticcastQString(data。at((x)));强转为QString类型QStandardItemitemnewQStandardItem(string);if(x20){设置色彩QLinearGradientlineargrad(QPointF(0,0),QPointF(200,200));lineargrad。setColorAt(0,Qt::darkGreen);QBrushbrush(lineargrad);itemsetBackground(brush);}追加到mode模型modelappendRow(item);}设置模型uilistViewsetModel(model);uilistViewsetFixedSize(200,300);} 代码运行效果如下: 上方代码中我们多数都是在使用View视图组件,接下来将具体分析Widget组件的使用细节,View组件与Widget组件看似一致,但却存在本质区别,其大致区别如下:Widget组件可以直接通过如AddItem等一系列函数操作特定数据集,该组件还具有直接编辑的能力。View组件是基于Model模型映射工作的,每次操作数据时都需要借助QAbstractListModel数据模型来操作。 简单来说View组件适合于浏览展示数据较多的场景,因为其绑定了链表结构从而在数据的展示上更为灵活,而Widget组件更适合于更新或修改数据较多的使用场景。 ListWidget节点初始化:节点的初始化就是向widget组件内插入一个QListWidgetItem类。初始化列表listWidgetBy:LySharkvoidMainWindow::onpushButtonclicked(){每一行是一个QListWidgetItemQListWidgetItemaI设置ICON的图标QIconaIaIcon。addFile(:image1。ico);uilistWidgetclear();for(intx0;x10;x){QStringstrQString::asprintf(192。168。1。d,x);aItemnewQListWidgetItem();新建一个项aItemsetText(str);设置文字标签aItemsetIcon(aIcon);设置图标aItemsetCheckState(Qt::Checked);设为选中状态aItemsetFlags(Qt::ItemIsSelectable设置为不可编辑状态Qt::ItemIsUserCheckableQt::ItemIsEnabled);uilistWidgetaddItem(aItem);增加项}} 代码运行效果如下: ListWidget行内文本变化:当我们点击行内任意一个列表选项时,我们让其触发currentItemChanged并将变化行更新到窗体上。listWidget当前选中项发生变化By:LySharkvoidMainWindow::onlistWidgetcurrentItemChanged(QListWidgetItemcurrent,QListWidgetItemprevious){QSif(current!NULL)需要检测变量指针是否为空{if(previousNULL)需要检测变量指针是否为空{str当前:currenttext();thissetWindowTitle(QString(currenttext()));}else{str前一项:previoustext();当前项:currenttext();std::coutstr。toStdString()。data()std::thissetWindowTitle(QString(currenttext()));}}} 代码运行效果如下: ListWidget编辑状态设置:默认情况下ListWidget组件内所有文件是不可编辑的,我们也可以将编辑属性打开。设置所有项设置为可编辑状态https:www。cnblogs。comlysharkvoidMainWindow::onpushButton5clicked(){intx,QListWidgetItemaIcntuilistWidgetcount();for(x0;x){aItemuilistWidgetitem(x);aItemsetFlags(Qt::ItemIsSelectableQt::ItemIsEditableQt::ItemIsUserCheckableQt::ItemIsEnabled);}} 代码运行效果如下: ListWidget全选全不选:全选顾名思义就是选中菜单中的所有数据,使用aItemsetCheckState(Qt::Checked)实现选中,通过循环计数即可。全选按钮https:www。cnblogs。comlysharkvoidMainWindow::onpushButton2clicked(){intcntuilistWidgetcount();获取总数for(intx0;x){QListWidgetItemaItemuilistWidgetitem(x);获取到一项指针aItemsetCheckState(Qt::Checked);设置为选中}}全不选By:LySharkvoidMainWindow::onpushButton3clicked(){intcntuilistWidgetcount();获取总数for(intx0;x){QListWidgetItemaItemuilistWidgetitem(x);获取到一项指针aItemsetCheckState(Qt::Unchecked);设置为非选中}} 代码运行效果如下: ListWidget反选功能:反选的含义是,用户选中菜单反选后会变为未选中状态,未选中则变为选中,只需要增加一个判断即可实现。By:LySharkvoidMainWindow::onpushButton4clicked(){intx,QListWidgetItemaIcntuilistWidgetcount();for(x0;x){aItemuilistWidgetitem(x);if(aItemcheckState()!Qt::Checked)aItemsetCheckState(Qt::Checked);elseaItemsetCheckState(Qt::Unchecked);}} 代码运行效果如下: ListWidget指定位置插入追加插入:在选中行的上方插入一行新的表项,以及追加到末尾一行。指定位置插入一项www。cnblogs。comlysharkvoidMainWindow::onpushButton8clicked(){QIconaIaIcon。addFile(:image3。ico);QListWidgetItemaItemnewQListWidgetItem(插入的数据);aItemsetIcon(aIcon);aItemsetCheckState(Qt::Checked);aItemsetFlags(Qt::ItemIsSelectableQt::ItemIsUserCheckableQt::ItemIsEnabled);在当前行的上方插入一个项uilistWidgetinsertItem(uilistWidgetcurrentRow(),aItem);}增加一项,尾部追加voidMainWindow::onpushButton7clicked(){QIconaIaIcon。addFile(:image2。ico);QListWidgetItemaItemnewQListWidgetItem(新增的项目);增加项目名aItemsetIcon(aIcon);设置图标aItemsetCheckState(Qt::Checked);设置为选中aItemsetFlags(Qt::ItemIsSelectableQt::ItemIsUserCheckableQt::ItemIsEnabled);uilistWidgetaddItem(aItem);增加到控件} 代码运行效果如下: ListWidget删除选中项:删除当前选中的一项,并清理释放内存。删除选中项voidMainWindow::onpushButton6clicked(){introwuilistWidgetcurrentRow();获取当前行QListWidgetItemaItemuilistWidgettakeItem(row);移除指定行的项,但不deletedeleteaI释放空间} 代码运行效果如下: