• 输入部件 QComboBox --组合框/下拉列表


     QComboBox 类是 QWidget 类的直接子类,该类实现了一个组合框
    一、QComboBox 类中的 属性

    常用属性

    1. void setItemIcon(int index, const QIcon &icon); // 设置item的图标
    2. void setIconSize(const QSize &size); // 设置item的图标尺寸
    3. // 设置item的用户数据
    4. void setItemData(int index, const QVariant &value, int role = Qt::UserRole);
    5. void setMaxCount(int max); // 设置item的允许最大数量
    6. QString itemText(int index) const; // 获取item的文本
    7. QIcon itemIcon(int index) const; // 获取item的图标
    8. QSize iconSize() const; // 获取item的图标尺寸
    9. QVariant itemData(int index, int role = Qt::UserRole) const; // 获取item的用户数据
    10. int count() const; // 获取item的数量
    11. int maxCount() const; // 获取item的允许最大数量
    QComboBOx 类(组合框)属性速查表
    属性名说明属性名说明
    count获取项目数量minimumContentsLength组合框中最少字符数
    maxCount允许的最大项数maxVisibleItems向用户显示的最大项目数
    editable是否可被编辑sizeAdjustPolicy组合框大小变更策略
    currentIndex当前项目的索引insertPolicy插入新项目时在组合框中的
    位置策略
    currentText当前项目的文本duplicatesEnabled内容是否可重复
    iconSize组合框中图标的大小modelColumn模型中可见的列
    frame是否绘制默认边框currentData当前项目的数据

    ①、 count: const int
    访问函数: int count() const;
    获取组合框中的项目数量,默认情况下,对于空组合框或未设置当前项目的组合框,
    其值为 0。
    ②、 maxCount: int
    访问函数: int maxCount() const; void setMaxCount(int);
    此属性描述组合框允许的最大项数,若设置的最大数小于组合框中当前的项目数量,
    则额外的项目会被截断。默认值为可使用的最高带符号整数(通常为 2147483647)。
    ③、 maxVisibleItems: int
    访问函数: int maxVisibleItems() const; void setMaxVisibleItems(int);
    此属性描述组合框在屏幕上向用户显示的项目数量(即可见项目数)

                                      

    ④、 minimumContentsLength: int
    访问函数: int minimumContentsLength() const; void setMinimumContentsLength(int);

    此属性描述,组合框项目的最少字符数量(见下图),若此属性为正值,则
    minimumSizeHint()和 sizeHint()会被考虑在内,默认为 0。

                          
    ⑤、 sizeAdjustPolicy: SizeAdjustPolicy
    访问函数: SizeAdjustPolicy sizeAdjustPolicy() const;

    void setSizeAdjustPolicy(SizeAdjustPolicy);

     此属性描述,当组合框的内容更改时,其组合框的大小如何更改。默认值为
    AdjustToContentsOnFirstShow。注意, 当 editable 被启用时, 此属性需位于 editable
    属性之前,否则该属性可能不起作用。
     SizeAdjustPolicy 是 QComboBox 类中的枚举,用于描述组合框的大小更改策略,
    其成员如下

    QComboBox::SizeAdjustPolicy 枚举(无标志)
    成员说明
    QComboBox::AdjustToContents0根据内容调整(见下图)
    QComboBox::AdjustToContentsOnFirstShow(默认值)1第一次显示时,根据内容调整
    QComboBox::AdjustToMinimumContentsLength2使 用 AdjustToContents 或
    AdjustToContentsOnFirstShow 代替
    QComboBox::AdjustToMinimumContentsLengthWithIcon3调整为 minimumContentsLength 属
    性的大小加上图标的空间。

                     

    ⑥、 insertPolicy: InsertPolicy
    访问函数: InsertPolicy insertPolicy() const; void setInsertPolicy(InsertPolicy);
    此属性描述插入新项目时应该出现在组合框中的位置,默认是 InsertAtBottom(新项目
    插入到底部),其中 InsertPolicy 是 QComboBox 类中的枚举,该枚举用于描述插入项
    目的位置,其成员见下表。

    QComboBox::InsertPolicy 枚举(无标志)
    成员说明
    QComboBox::NoInsert0字符串不会插入到组合框中
    QComboBox::InsertAtTop1字符串插入组合框中的第一项
    QComboBox::InsertAtCurrent2使用字符串替换掉当前项目
    QComboBox::InsertAtBottom3字符串插入到组合框的最后一项之后(默认值)
    QComboBox::InsertAfterCurrent4字符串插入到组合框的当前项目之后
    QComboBox::InsertBeforeCurrent5字符串插入到组合框的当前项目之前
    QComboBox::InsertAlphabetically6字符串按字母顺序插入到组合框中。

    ⑦、 editable: bool

    访问函数: bool isEditable() const; void setEditable(bool);
    此属性描述,组合框是否可由用户编辑,默认为 fasle。
    注意:当禁用该属性时,将删除 validator 和 completer。

    ⑧、 duplicatesEnabled: bool
    访问函数: bool duplicatesEnabled() const;  void setDuplicatesEnabled(bool);
    此属性描述,用户是否可重复项目输入到组合框中,注意:以编程的方式总是可以

    插入重复项目到组合框中。默认为 false(不允许重复)
    ⑨、 currentData: const QVariant //qt5.2
    访问函数: QVariant currentData(int role = Qt::UserRole) const;
    保存当前项目的数据,对于空组合框或未设置当前项目的组合框,默认情况下,此属
    性为无效的 QVariant。
    ⑩、 currentIndex: int
    访问函数: int currentIndex() const; void setCurrentIndex(int);
    信号: currentIndexChanged(int); void currentIndexChanged(const QString&);
    此属性描述组合框当前项目的索引(从 0 开始),插入或删除时,索引可能会改变,对
    于空组合框或未设置当前项目的组合框,默认情况下,此属性的值为-1。
    ⑪、 currentText: QString
    访问函数: QString currentText() const; void setCurrentText(const QString&);
    信号: void currentTextChanged(const QString&);
     此属性描述当前的文本, 注意:设置函数 setCurrentText()并不能把新文本添加到
    组合框中,该函数仅能使组合框显示该文本。
     此属性的 setTextCurrentText()仅在组合框可编辑时才会起作用。
     若组合框是可编辑的,则 currentText 是编辑时显示的文本,
     若组合框为空或未设置当前项目的组合框,则为当前项目的值或空字符串。
     若组合框是可编辑的,则设置函数 setCurrentText()只需调用 setEditText()函数。
    ⑫、 iconSize: QSize
    访问函数: QSize iconSize() const; void setIconSize(const QSize&);
    此属性描述组合框中显示的图标的大小。默认值是图标可以拥有的最大大小,较小尺
    寸的图标不会被放大。
    ⑬、 frame: bool
    访问函数: bool hasFrame() const; void setFrame(bool);
    此属性描述组合框是否绘制默认的边框,默认为 true(启用)
    ⑭、 modelColumn: int
    访问函数: int modelColumn() const; void setModelColumn(int);
    此属性描述,模型中可见的列,若此属性设置于填充组合框的内容之前,则弹出的视
    图不会受到影响,并且会显示第 1 列(默认值)。默认为 0

    QComboBox(组合框)的属性 示例:(创建QT项目+ 添加core;gui;widgets )

    1. //m.h 文件内容
    2. #ifndef M_H
    3. #define M_H
    4. #include<QtWidgets>
    5. #include <iostream>
    6. using namespace std;
    7. class B:public QComboBox{
    8. Q_OBJECT
    9. public: B(QWidget* p=0):QComboBox(p){}
    10. public slots:
    11. void f(){ cout<<currentIndex()<<endl; //获取当前项目的索引
    12. cout<<currentText().toStdString()<<endl; //获取当前项目的文本
    13. }
    14. void f1(){setCurrentText("EEE"); }//将 EEE 显示在组合框中,但不会添加到组合框中
    15. };
    16. #endif // M_H
    17. //m.cpp 文件的内容
    18. #include "m.h"
    19. int main(int argc, char *argv[]){
    20. QApplication a(argc,argv);
    21. QWidget w;
    22. QPushButton *b=new QPushButton("cout",&w); b->move(22,22);
    23. QPushButton *b1=new QPushButton("currentText",&w); b1->move(99,22);
    24. //创建组合框对象
    25. B *pc1=new B(&w); pc1->move(55,55);
    26. //向组合框中添加内容
    27. pc1->insertItem(1,"AAA"); pc1->insertItem(2,"BBB"); pc1->insertItem(4,"CCC");
    28. QObject::connect(b, &QPushButton::clicked, pc1, &B::f); //连接信号与槽
    29. QObject::connect(b1, &QPushButton::clicked, pc1, &B::f1);
    30. pc1->setSizeAdjustPolicy(QComboBox::AdjustToContents); //根据内容自动调整组合框大小
    31. pc1->setCurrentIndex(1); //设置当前项目的索引为 1, 初始显示时会显示索引为 1 的项目。
    32. pc1->setDuplicatesEnabled(true); //可向组合框中添加重复的内容。
    33. pc1->setEditable(1); //使组合框可编辑
    34. pc1->setInsertPolicy(QComboBox::InsertAtCurrent);//插入的内容替换当前项目
    35. w.resize(300,200); w.show();
    36. return a.exec();
    37. }

    二、QComboBox 类中的成员函数

    常用函数

    1. comboBox->addItem("cxq"); //添加下拉选项
    2. combobox->clear(); //清空下拉项
    3. comboBox->setCurrentIndex(0);//设置当前的索引
    4. int currentlndex()//返回当前项的序号,第一个项的序号为0
    5. combobox->currentText(); //获取当前项的内容
    6. QVariant currentData(int role = Qt::UserRole):返回"当前项"的关联数据
    7. QVariant itemData(int index, int role = Qt%:UserRole) 返回"指定索引号的项"的关联数据。
    8. comboBox->itemText(2); //获取第二项的内容
    9. combobox->count(); //获取项的个数
    10. void removeItem(int index); //通过指定索引 删除item

    ①、 QComboBox(QWidget* parent = Q_NULLPTR); //构造函数
    ②、 void addItem(const QString &text, const QVariant& userData = QVariant());
    void addItem(const QIcon &icon , const QString &text, const QVariant& userData = QVariant());
    void addItems(const QStringList &texts); //注意,该函数后面的字母 s
    以上函数用于向组合框中添加内容,其中 userData(暂时不需要理解此参数)存储于
    Qt::UserRole 中。
    ③、 void setItemText(int index, const QString &text);
    QString itemText(int index) const;
    以上函数分别表示,把索引为 index 处的项目设置为 text (可用于修改项目),和获取
    索引为 index 处的文本。 索引是从 0 开始的。
    ④、 void setItemIcon(int index, const QIcon &icon);
    QIcon itemIcon(int index) const;
    以上函数分别表示,把索引为 index 处的项目的图标设置为 icon,和获取索引为 index
    处的图标。索引是从 0 开始的。
    ⑤、 void insertItem(int index, const QString &text, const QVariant &userData = QVariant());
    void insertItem(int index, const QIcon &icon , const QString &text,
    const QVariant &userData = QVariant());
    void insertItems(int index, const QStringList &list); //注意最后的字母 s
    以上函数用于向组合框中插入内容,若指定的索引大于或等于项目总数,则新项目被
    追加到项目的末尾,若索引为 0 或负数,则新项目被添加到现有项目的前面。
    ⑥、 void removeItem(int index);
    删除指定索引处的项目,若索引被删除,将更新当前索引,若索引超出范围,则此函
    数不执行任何操作。
    ⑦、 void clear() //槽, 清除组合框中的所有项目
    ⑧、 void insertSeparator(int index);
    在索引 index 处插入分隔器,若指定的索引大于或等于项目总数,则新项目被追加
    到项目的末尾,若索引为 0 或负数,则新项目被添加到现有项目的前面。 注:插入
    的分隔器在视觉上可能不会很明显的看得出来。
    ⑨、 void setLineEdit(QLineEdit* edit);
    设置组合框的文本编辑部件为 edit,设置该项之后,组合框会成为可编辑的。
    ⑩、 QLineEdit* lineEidt() const;
    返回组合框中的行编辑器,若没有,则返回 0。只有可编辑的组合框才会行编辑器。
    ⑪、 void setEditText(const QString &text); //槽
    将组合框的文本设置为 text, 此函数不能把新文本添加到组合框中,仅能使组合框
    显示该文本。组合框是可编辑的状态时,该函数才会起作用。该函数与 currentText
    属性的设置函数 setCurrentText()类似。
    void clearEditText() //槽
    此函数用于清除 setEditText()函数设置的文本,也可用于清除正在编辑的文本。

    ⑫、 virtual void showPopup(); //虚函数
    virtual void hidePopup() //虚函数
    以上函数用于显示隐藏项目列表
    ⑬、 int findText(const QString &text , Qt::MatchFlags flags = static_cast
    ( Qt::MatchExactly | Qt::MatchCaseSensitive)) const;
    查找text所在项目的索引。其中Qt::MatchFlag枚举是用于描述查找时的匹配方式的,

    Qt::MatchFlags 是该枚举的标志,此处默认的区配方式是执行基于 QVariant 的匹配,
    且搜索时区分大小写。详细内容请参阅“部件公用枚举”章节。
    ⑭、
    const QValidator* validator() const;  void setValidator( const QValidator* validator);
    以上函数用于设置和获取 QValidator(验证器)的,验证器用于对输入的文本进行验证,
    也就是说可以使用该类来限制用户的输入(比如只能输入数字等)。 QValidator 类会在
    后文讲解。 验证器需组合框在可编辑状态下。


    QComboBox(组合框)内容的添加、设置、插入、移除、清除、查找 示例

    1. //1、m.h 文件的内容
    2. #ifndef M_H
    3. #define M_H
    4. #include<QtWidgets>
    5. #include <iostream>
    6. using namespace std;
    7. //注:使用以下方式组织程序可以方便信号和槽的关联
    8. class B :public QWidget {
    9. Q_OBJECT
    10. public: //创建部件
    11. QPushButton *b; QPushButton *b1; QPushButton *b2; QPushButton *b3;
    12. QPushButton *b4; QPushButton *b5; QPushButton *b6; QComboBox *pc1; QLineEdit *pe;
    13. B(QWidget* p = 0) :QWidget(p) { //构造函数开始
    14. //创建和布局部件
    15. b = new QPushButton("add", this); b1 = new QPushButton("set", this);
    16. b2 = new QPushButton("insert", this); b3 = new QPushButton("remove", this);
    17. b4 = new QPushButton("clear", this); b5 = new QPushButton("show", this);
    18. b6 = new QPushButton("find", this);
    19. b->move(22, 22); b1->move(22, 44); b2->move(22, 66); b3->move(22, 88);
    20. b4->move(22, 111); b5->move(22, 133); b6->move(22, 155);
    21. pc1 = new QComboBox(this); pc1->move(111, 77);
    22. pe = new QLineEdit("XXXX", this); pe->move(111, 44);
    23. pc1->setSizeAdjustPolicy(QComboBox::AdjustToContents); //组合框根据内容自动调整大小
    24. //向组合框 pc1 中添加文本
    25. QStringList s;
    26. s.append("AAA"); s.append("BBB"); s.append("CCC"); s.append("DDD");
    27. pc1->addItems(s);
    28. //连接信号与槽
    29. QObject::connect(b, &QPushButton::clicked, this, &B::addf);
    30. QObject::connect(b1, &QPushButton::clicked, this, &B::setf);
    31. QObject::connect(b2, &QPushButton::clicked, this, &B::insertf);
    32. QObject::connect(b3, &QPushButton::clicked, this, &B::removef);
    33. QObject::connect(b4, &QPushButton::clicked, pc1, &QComboBox::clear);
    34. QObject::connect(b5, &QPushButton::clicked, this, &B::showf);
    35. QObject::connect(b6, &QPushButton::clicked, this, &B::findf);
    36. } //构造函数结束
    37. public slots:
    38. void addf() { QString s = pe->text(); pc1->addItem(s); } //在末尾添加文本 s
    39. void setf() {
    40. QString s = pe->text();
    41. int i = pc1->currentIndex();
    42. pc1->setItemText(i, s);
    43. }//把当前索引号处的文本设置为 s
    44. void insertf() {
    45. QString s = pe->text();
    46. int i = pc1->currentIndex();
    47. pc1->insertItem(i, s);
    48. }//在当前索引号处插入文本 s
    49. void removef() { int i = pc1->currentIndex(); pc1->removeItem(i); }//移除当前索引号处的文本
    50. void showf() { pc1->showPopup(); }
    51. void findf() {
    52. QString s = pe->text();
    53. //执行模糊搜索且区分大小写
    54. cout << pc1->findText(s, Qt::MatchContains | Qt::MatchCaseSensitive) << endl;
    55. }
    56. };
    57. #endif // M_H
    58. //2、m.cpp 文件的内容
    59. #include "Header.h"
    60. int main(int argc, char *argv[]) {
    61. QApplication a(argc, argv);
    62. B mb; mb.resize(300, 200); mb.show();
    63. return a.exec();
    64. }

    三、QComboBox 类中的信号

    常用信号

    1. void currentindexChanged(int index);//选择项发生变化时 发射该信号
    2. void currentindexChanged(const QString &text);//选择项发生变化时 发射该信号

    ①、 void activated(int index); void activated(const QString &text);    //信号

     当用户在组合框中选中一个项目时,发送以上信号,其中 index 是被选中项目的
    索引, text 是被选中项目的文本。
     注意:即使选择未改变(即两次都选择相同的项目),也会发送以上信号。
     注意:在组合中展开的下接列表中仅仅移动加亮条并不会使项目被选中,选择项
    目后需点击鼠标或按下 enter 键才会使项目选中。也可在组合框获得焦点时,下
    拉列表处于隐藏状态下,使用键盘上的上/下方向键选中组合框中的项目。

    ②、 void currentIndexChanged(int index);    //currentIndex 属性改变时发送
    void currentIndexChanged(const QString &text); //currentIndex 属性改变时发送
    void currentTextChanged(const QString &text);  //currentText 属性改变时发送

     当组合框中的 currentIndex 或 currentText 属性通过用户或编程的方式被改变时,
    就会发送以上信号。其中 index 是被改变后的项目的索引, text 是被改变后的项目
    的文本。
     注意: 以上信号发送的条件是 currentIndex 或 currentText 属性改变, 下面是其改
    变的时机
     在选中不同的项目后这两个属性都会产生改变,也就是说在组合框展开的下
    接列表中仅仅移动加亮条并不会使这两个属性改变,需要使项目被选中(使用
    鼠标点击或按下 enter 键)且不能选择与之前相同的项目时, currentIndex 或
    currentText 属性才会改变。
     当组合框在可编辑状态下时,在组合框中改变文本的内容时, currentText 属
    性会改变,但 currentIndex 属性不会改变。
    ④、 void editTextChanged(const QString &text); //信号
    当组合框的行编辑器部件中的文本被更改时,发送此信号。 text 是改变后的新文本。
    文本更改的时机,与 currentText 属性改变的时机相同,详见 currentTextChanged 信号。

    ⑤、 void highlighted(int index); //信号
    void highlighted(const QString &text); //信号

    当在组合框展开的下接列表中改变加亮条时,发送以上信号。
    ⑥、以上信号发送时机的测试,读者可自行编写程序验证。

    四、设置QComboBox下拉框的样式,可以是 列表、树、表格 等格式

    void setView(QAbstractItemView *itemView)
    model/view 使用

    QComboBox 使用模型/视图框架作为其弹出列表并存储其项目。默认情况,QStandardItemModel 存储项目,QListView 子类显示弹出列表。这个我后面会把Model/View和这个连在一起重新梳理下
     

  • 相关阅读:
    华为centos7服务器中安装python3.10.13 脚本方式安装或手动安装
    虚拟机Linux如何做快照、备份以及快照的使用
    【C语言】函数递归详解
    JWT(2):JWT入门使用
    新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析
    mysql数据库索引
    Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱
    Redis主从复制
    github Copilot的使用总结
    codeforces每日5题(均1700)-第五天
  • 原文地址:https://blog.csdn.net/zxf347085420/article/details/132718634