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

news2024/11/25 6:47:34

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

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 )

//m.h 文件内容
#ifndef M_H
#define M_H
#include<QtWidgets>
#include <iostream>
using namespace std;

class B:public QComboBox{ 
Q_OBJECT
public: B(QWidget* p=0):QComboBox(p){}
public slots:
    void f(){ cout<<currentIndex()<<endl; //获取当前项目的索引
        cout<<currentText().toStdString()<<endl; //获取当前项目的文本
    }
    void f1(){setCurrentText("EEE"); }//将 EEE 显示在组合框中,但不会添加到组合框中
};
#endif // M_H


//m.cpp 文件的内容
#include "m.h"
int main(int argc, char *argv[]){ 
    QApplication a(argc,argv);
    QWidget w;
    QPushButton *b=new QPushButton("cout",&w); b->move(22,22);
    QPushButton *b1=new QPushButton("currentText",&w); b1->move(99,22);
    
    //创建组合框对象
    B *pc1=new B(&w); pc1->move(55,55);
    //向组合框中添加内容
    pc1->insertItem(1,"AAA"); pc1->insertItem(2,"BBB"); pc1->insertItem(4,"CCC");
    QObject::connect(b, &QPushButton::clicked, pc1, &B::f); //连接信号与槽
    QObject::connect(b1, &QPushButton::clicked, pc1, &B::f1);
    
    pc1->setSizeAdjustPolicy(QComboBox::AdjustToContents); //根据内容自动调整组合框大小
    pc1->setCurrentIndex(1); //设置当前项目的索引为 1, 初始显示时会显示索引为 1 的项目。
    pc1->setDuplicatesEnabled(true); //可向组合框中添加重复的内容。
    pc1->setEditable(1); //使组合框可编辑
    pc1->setInsertPolicy(QComboBox::InsertAtCurrent);//插入的内容替换当前项目
    w.resize(300,200); w.show(); 
    return a.exec(); 
}

二、QComboBox 类中的成员函数

①、 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::MatchFlags>
( Qt::MatchExactly | Qt::MatchCaseSensitive)) const;
查找text所在项目的索引。其中Qt::MatchFlag枚举是用于描述查找时的匹配方式的,

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


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

//1、m.h 文件的内容
#ifndef M_H
#define M_H
#include<QtWidgets>
#include <iostream>
using namespace std;

//注:使用以下方式组织程序可以方便信号和槽的关联
class B :public QWidget {
	Q_OBJECT
public: //创建部件
	QPushButton *b; QPushButton *b1; QPushButton *b2; QPushButton *b3;
	QPushButton *b4; QPushButton *b5; QPushButton *b6; QComboBox *pc1; QLineEdit *pe;
	
	B(QWidget* p = 0) :QWidget(p) { //构造函数开始
									//创建和布局部件
		b = new QPushButton("add", this); b1 = new QPushButton("set", this);
		b2 = new QPushButton("insert", this); b3 = new QPushButton("remove", this);
		b4 = new QPushButton("clear", this); b5 = new QPushButton("show", this);
		b6 = new QPushButton("find", this);
		b->move(22, 22); b1->move(22, 44); b2->move(22, 66); b3->move(22, 88);
		b4->move(22, 111); b5->move(22, 133); b6->move(22, 155);
		pc1 = new QComboBox(this); pc1->move(111, 77);
		pe = new QLineEdit("XXXX", this); pe->move(111, 44);
		pc1->setSizeAdjustPolicy(QComboBox::AdjustToContents); //组合框根据内容自动调整大小
															   //向组合框 pc1 中添加文本
		QStringList s;
		s.append("AAA"); s.append("BBB"); s.append("CCC"); s.append("DDD");
		pc1->addItems(s);
		//连接信号与槽
		QObject::connect(b, &QPushButton::clicked, this, &B::addf);
		QObject::connect(b1, &QPushButton::clicked, this, &B::setf);
		QObject::connect(b2, &QPushButton::clicked, this, &B::insertf);
		QObject::connect(b3, &QPushButton::clicked, this, &B::removef);
		QObject::connect(b4, &QPushButton::clicked, pc1, &QComboBox::clear);
		QObject::connect(b5, &QPushButton::clicked, this, &B::showf);
		QObject::connect(b6, &QPushButton::clicked, this, &B::findf);
	} //构造函数结束
	
public slots:
	void addf() { QString s = pe->text(); pc1->addItem(s); } //在末尾添加文本 s
	void setf() {
		QString s = pe->text(); 
		int i = pc1->currentIndex();
		pc1->setItemText(i, s);
	}//把当前索引号处的文本设置为 s
	
	void insertf() {
		QString s = pe->text(); 
		int i = pc1->currentIndex();
		pc1->insertItem(i, s);
	}//在当前索引号处插入文本 s
	
	void removef() { int i = pc1->currentIndex(); pc1->removeItem(i); }//移除当前索引号处的文本
	void showf() { pc1->showPopup(); }
	void findf() {
		QString s = pe->text();
		//执行模糊搜索且区分大小写
		cout << pc1->findText(s, Qt::MatchContains | Qt::MatchCaseSensitive) << endl;
	}
};
#endif // M_H


//2、m.cpp 文件的内容
#include "Header.h"
int main(int argc, char *argv[]) {
	QApplication a(argc, argv);
	B mb; mb.resize(300, 200); mb.show(); 
	
	return a.exec();
}

三、QComboBox 类中的信号

①、 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); //信号

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络第三章——数据链路层(中)

数声风笛离亭晚&#xff0c;君向潇湘我向秦 文章目录 ALOHA协议CSMA协议CSMA/CD协议CSMA/CA协议 总线型和星型都是广播式通信&#xff0c;看一下目的地址是否是我&#xff0c;若是我就接受否则就丢弃&#xff0c;总线型就是若是有一个断了则会影响其他的&#xff0c;型型的就是…

报错:为什么数组明明有内容但打印的length是0

文章目录 一、问题二、分析三、解决1.将异步改为同步2.设置延迟 一、问题 在日常开发中&#xff0c;for 循环遍历调用接口&#xff0c;并将接口返回的值进行拼接&#xff0c;即push到一个新的数组中&#xff0c;但是在for循环内部是可以拿到这个新的数组&#xff0c;而for循环…

接口测试工具开发文档

1 开发规划 1.1 开发人员 角 色 主要职责 负责模块 人员 备注 n xxx模块 xxx 1.2 开发计划 <附开发计划表> 1.3 开发环境和工具 开发工具 工具 作用 Notepad 编辑器 Perl 解释器 2 总体设计 设计思路&#xff1a;因为测试app和server。首先必须…

vue3中使用viewerjs实现图片预览效果

vue3中使用viewerjs实现图片预览效果 1、前言2、实现效果3、在vue3项目中使用viewer.js3.1 安装3.2 在main.js中引入3.3 组件中使用 1、前言 viewer.js是一款开源的图片预览插件&#xff0c;功能十分强大: 支持移动设备触摸事件支持响应式支持放大/缩小支持旋转&#xff08;类…

CPU及并发

2.9G Hz,即每秒进行2.9G次运算(即29亿次) 几个命令 us: 用户使用的cpu sy: 系统(内核)使用的cpu id: idle,即空闲cpu wa: 等待I/O的cpu st: 开虚拟机后会有的一个指标,即虚拟机的cpu使用率 一个进程拥有一整套虚拟地址空间,该进程的所有线程都共享该地址空间. 线程是CPU运算的最…

Docker如何安装seafile

SQLite 方式 要在 Docker 中安装 Seafile&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 Docker&#xff1a;确保您的系统上已经安装了 Docker。您可以根据您的操作系统类型&#xff0c;在官方网站上找到适合您系统的 Docker 版本并进行安装。 下载 Seafile 镜像&…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——涂色

⛲️ 一、考点讲解 1.题目特征 如果给几种颜色来填涂所给的图形&#xff0c;就是涂色问题。 2.解题方法 可以按照图形逐一依次填涂&#xff0c;也可以按照所用颜色的种数进行分类讨论。 二、考试解读 &#xff08;1&#xff09;涂色问题一般要求相邻的颜色不能相同&#xff0c…

2023年9月9日(星期六)骑行笔架山

2023年9月9日 (星期六)&#xff1a;骑行笔架山&#xff0c;早8:30到9:00&#xff0c; 大观楼门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点: 大观楼门囗集合&#xff0c;家住东&#xff0c;南&#xff0c;北…

将Vivado设为xpr文件的默认打开方式

在linux上安装vivado后不会将vivado设为默认的打开方式&#xff0c;需要修改部分gnome配置文件解决。本文基于RHEL 8.8&#xff08;gnome 3.32.2&#xff09;编写&#xff0c;所涉及的文件路径可能因gnome版本而异。 操作步骤 1. 新增xpr文件类型&#xff08;可选&#xff0c;…

【zookeeper】ZooKeeper的特点及应用场景

ZooKeeper 的特点/设计目标 ZooKeeper&#xff08;动物园管理员&#xff09; &#xff0c;顾名思义&#xff0c;是用来管理Hadoop&#xff08;大象&#xff09;、Hive&#xff08;蜜蜂&#xff09;、Pig&#xff08;小猪&#xff09;的管理员&#xff0c;同时Apache HBase、Ap…

人工神经网络实验:第一次上机

pratice03&#xff1a; 1.问题描述&#xff1a; 就是通过设置只有一个hidden层的神经网络&#xff0c;对一个平面的灰面和白面进行分类 2.完整代码&#xff1a; # 可提供解题和验证代码&#xff0c;自行产生数据import torch import torch.nn as nn import torch.nn.functi…

【Cisco Packet Tracer】交换机划分Vlan实验

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

制作成绩查询平台

成绩查询是学校教学管理中必不可少的一项工作&#xff0c;传统的成绩查询方式通常是将成绩表格发到群里供家长查看。然而&#xff0c;这种方式存在许多不便之处&#xff0c;如成绩表格容易丢失、家长需要翻找自己孩子的成绩等问题。 好消息&#xff01;博主给大家争取到的易查分…

“谁天生是项目经理?四大特质决定你的机会“

大家好&#xff0c;我是老原。 但其实不少刚开始尝试项目管理的人&#xff0c;包括老原自己也曾经遇到过这样的问题&#xff1a; ▪ 自己没权没势&#xff0c;大家凭什么听我的&#xff1f; ▪ 资源受限&#xff0c;如何向老板争取更多资源&#xff1f; ▪ 怎样才能推进多方…

el-date-picker 禁止选择当前年之前或者之后的年份

<el-date-picker v-model"ruleForm.years" type"year" :disabled-date"pickerOptions"placeholder"请选择获奖年度" class"wih-650p" value-format"YYYY" />之前 const disabledDateFun (time: any) >…

pycharm如何配置 .gitignore 文件

参考&#xff1a;https://zongweizhou1.github.io/2019/06/16/pycharm-gitignore/ .gitignore 文件本身不需要纳入版本控制&#xff0c;在 .gitignore 文件中写入“.gitignore"忽略即可

Python,如何安装cython_bbox

我是windows系统&#xff0c;pip install cython_bbox无法编译。 解决&#xff1a; 安装pip install cpython 安装VS2019企业版&#xff0c;为了windows能编译一些乱七八糟的&#xff0c;我一般都装个这个。 key BF8Y8-GN2QH-T84XB-QVY3B-RC4DF下载源码&#xff1a;https://…

中国电信举办5G RedCap产业对接交流会,加速推进RedCap商用

近日&#xff0c;由中国电信股份有限公司浙江分公司、天翼物联产业联盟、浙江5G产业联盟联合主办的 “5G融合领先&#xff0c;赋能千行百业数字化”中国电信5G RedCap产业对接交流会&#xff08;浙江站&#xff09;在杭州举办&#xff0c;相关产业链同仁齐聚一堂&#xff0c;共…

Vue+NodeJS+MongoDB实现邮箱验证注册、登录

一.主要内容 邮件发送用户注册用户信息存储到数据库用户登录密码加密JWT生成tokenCookie实现快速登录 在用户注册时,先发送邮件得到验证码.后端将验证进行缓存比对,如果验证码到期,比对不正确,拒绝登录;如果比对正确,将用户的信息进行加密存储到数据库. 用户登录时,先通过用…

c高级day1(9.6) 离线软件安装,文件相关指令,文件权限相关指令,

作业: 使用cut截取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割 不会 Xmind&#xff1a;