Qt | 控件之QComboBox

379 阅读3分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。

QComboBox是下拉列表组件类,它提供一个下拉列表供用户选择,也可以直接当做一个QLineEdit用作输入。用户点击控件后,可以从出现的下拉菜单中选择一项。QComboBox除了显示可见下拉列表外,每个item(列表项)还可以关联一个QVariant类型的变量,用于存储一些不可见数据。

1643797418(1).jpg

QVariant可以存储各种数据类型,类似于C++联合(union)数据类型,它不仅能够保存很多Qt类型的值,包括QColor,QBrush,QFont,QPen,QString和QSize等,也能够存放Qt的容器类型的值。

头文件:#include<QComboBox>

创建方式:

  • 静态方式:直接从工具箱中拖拉复选框控件的方式,不需要手动添加头文件,Qt Creator会自动添加;
  • 动态方式:通过new创建复选框的方式,需要我们通过代码来手动添加头文件。

动态方式创建:QComboBox combo = new ComboBox(this);

设置样式:

setStyleSheet();

如果只是简单的创建一个QComboBox,对它显示的样式没有要求,就可以用系统的样式,不需要自己手动进行设置,但是如果为了界面美化需要设置样式表,可以使用setStyleSheet()函数对QComboBox的样式进行设置。

/* 未下拉时 */
"QComboBox {border:1px solid #eeeeee;border-radius:4px;
            padding:1px 18px 1px 50px; background:#ffffff;
            font-size:14px;color:#333333;font-family:Microsoft YaHei UI;}
 QComboBox:checked {border:1px solid #069aae;}//下拉后,整个下拉窗体样式
 QComboBox QAbstractItemView{outline: 0px solid gray;//选定项的虚线框
           border:1px solid #eeeeee;//整个下拉窗体的边框
           color:#333333;font-size:14px;font-family:Microsoft YaHei UI;
           background-color: #ffffff;//整个下拉窗体的背景色
           selection-color:#333333;selection-background-color:#f1f8ff;}//被选中的背景色
/* 下拉箭头样式 */
 QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;
           width: 16px;
           border-left: 0px solid darkgray;
           border-top-right-radius: 4px;
           border-bottom-right-radius: 4px;}
 QComboBox::down-arrow {image:url(:/image/gdt_xx_n.png); padding-right: 10px;}
 QComboBox::down-arrow:on {image:url(:/image/gdt_xs_n.png); padding-right: 10px;}";

添加项:

addItem();//添加一个列表项

  • 带图标:combo->addItem(QIcon(:/image/Henan.png), "Henan");
  • 不带图标:combo->addItem("Henan");

addItems();//只是添加字符串列表项,而且数据来源于一个QStringList变量

QStringList strList;
strList<<"Henan"<<"ShanDong"<<"FuJian"<<"TianJin";
combo->addItems(strList);

访问项:

  • int currentIndex();//返回当前项的序号,第一个项的序号为0。
  • QString currentText();//返回当前项的文字。
  • QVariant currentData(int role = Qt::UserRole);//返回当前项的关联数据,数据的缺省角色为role=Qt::UserRole(可以自定义的数据)。
  • QString itemText(int index);//返回指定索引号的项的文字。
  • QVariant itemData(int index, int role = Qt::UserRole);//返回指定索引号的项的关联数据。
  • int count();//返回项的个数。

删除项:

remove(int index);//通过索引值删除项目

信号:

  • void currentIndexChanged(int index);
  • void currentIndexChanged(const QString &text);

这两个信号只是传递的参数不同,一个传递的是当前项的索引号,一个传递的是当前项的文字。可以根据自己的实际情况选择合适的使用。