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

 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::AdjustToContents 0 根据内容调整(见下图)
QComboBox::AdjustToContentsOnFirstShow(默认值) 1 第一次显示时,根据内容调整
QComboBox::AdjustToMinimumContentsLength 2 使 用 AdjustToContents 或
AdjustToContentsOnFirstShow 代替
QComboBox::AdjustToMinimumContentsLengthWithIcon 3 调整为 minimumContentsLength 属
性的大小加上图标的空间。

                 

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

QComboBox::InsertPolicy 枚举(无标志)
成员 说明
QComboBox::NoInsert 0 字符串不会插入到组合框中
QComboBox::InsertAtTop 1 字符串插入组合框中的第一项
QComboBox::InsertAtCurrent 2 使用字符串替换掉当前项目
QComboBox::InsertAtBottom 3 字符串插入到组合框的最后一项之后(默认值)
QComboBox::InsertAfterCurrent 4 字符串插入到组合框的当前项目之后
QComboBox::InsertBeforeCurrent 5 字符串插入到组合框的当前项目之前
QComboBox::InsertAlphabetically 6 字符串按字母顺序插入到组合框中。

⑦、 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 )

输入部件 QComboBox --组合框/下拉列表_第1张图片

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

class B:public QComboBox{ 
Q_OBJECT
public: B(QWidget* p=0):QComboBox(p){}
public slots:
    void f(){ cout<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 --组合框/下拉列表_第2张图片

二、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::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
#include 
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 --组合框/下拉列表_第3张图片

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

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

你可能感兴趣的:(#,QT常用控件,qt)