在 TabWidget 组件的第一个页面上放置一个 QListWidget 组件,以及其他几个按钮和编辑框,组成如图 2 所示的界面。QListWidget 是存储多个项的列表组件,每个项是一个 QListWidgetltem 类型的对象。 双击 ListWidget 组件,可以打开其列表项编辑器,如图 3 所示。在这个编辑器里可以增加、删除、上移、下移列表项,可以设置每个项的属性,包括文字内容、字体、文字对齐方式、背景色、前景色等。 比较重要的是其 flags 属性(如图 3 所示),用于设置项的一些标记,这些标记是枚举类型 Qt::ItemFlag 的具体值,包括以下几种: UserCheckable:项是否可以被复选,若为 true,项前面出现一个 CheckBox,对应枚举值 Qt::ItemlsUserCheckable。 void MainWindow::on_actListIni_triggered() { //初始化项 QListWidgetItem *aItem; //每一行是一个QListWidgetItem QIcon aIcon; aIcon.addFile(:/images/icons/check2.ico); //设置ICON的图标 bool chk=ui-chkBoxListEditable-isChecked();//是否可编辑 ui-listWidget-clear(); //清除项 for (int i=0; i10; i++) { QString str=QString::asprintf(Item %d,i); aItem=new QListWidgetItem(); //新建一个项 aItem-setText(str); //设置文字标签 aItem-setIcon(aIcon);//设置图标 aItem-setCheckState(Qt::Checked); //设置为选中状态 if (chk) //可编辑, 设置flags aItem-setFlags(Qt::ItemIsSelectable Qt::ItemIsEditable Qt::ItemIsUserCheckable Qt::ItemIsEnabled); else//不可编辑, 设置flags aItem-setFlags(Qt::ItemIsSelectable Qt::ItemIsUserCheckable Qt::ItemIsEnabled); ui-listWidget-addItem(aItem); //增加一个项 } } QListWidgetItem 有许多函数方法,可以设置项的很多属性,如设置文字、图标、选中状态,还可以设置 flags,就是图 3 对话框里设置功能的代码化。 插入项使用 QListWidget 的 insertItem(int row, QListWidgetItem *item) 函数,在某一行 row 的前面插入一个 QListWidgetItem 对象 item,也需要先创建这个 item,并设置好其属性。actListInsert 实现这个功能,其槽函数代码如下: Qt::PartiallyChecked:部分选中。在目录树中的节点可能出现这种状态,比如其子节点没有全部被勾选时。 QListWidget的常用信号QListWidget 在当前项切换时发射两个信号,只是传递的参数不同: 还可以为 QToolButton 按钮设计下拉菜单,在图 1 的运行窗口中,单击工具栏上的“项选择”按钮,会在按钮的下方弹出一个菜单,有 3 个菜单项用于项选择。 在主窗口类里定义一个私有函数 createSelectionPopMenu(),并在窗口的构造函数里调用,其代码如下: setPopupMode(QToolButton::MenuButtonPopup):设置其弹出菜单的模式。QToolButton::MenuButtonPopup 是一个枚举常量,这种模式下,按钮右侧有一个向下的小箭头,必须单击这个小按钮才会弹出下拉菜单,直接单击按钮会执行按钮关联的 Action,而不会弹出下拉菜单。 工具栏上具有下拉菜单的按钮需要动态创建。先创建 QToolButton 对象 aBtn,同样用以上 4 个函数进行设置,但是设置的参数稍微不同,特别是设置弹出菜单模式为: 这样会在鼠标当前位置显示弹出式菜单,静态函数 QCursor::pos() 获得鼠标光标当前位置。快捷菜单的运行效果如图 6 所示。图 6 listWidget 组件的右键快捷菜单的运行效果 |