2.1.6 buttonBox按钮盒
按钮盒(ButtonBox)可以很方便地快速布置一组标准按钮,比如:常见的确认对话框有 “OK”“Cancel”等标准按钮,Qt 将这些典型的按钮做成标准按钮盒,并将相应的信号加以封装,方便程序员使用,它有水平和垂直两种样式。
创建ButtonBox按钮盒示例
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel,this);
按钮盒标准按钮的枚举值:
常量 |
数值 |
描述 |
QDialogButtonBox::Ok |
0x00000400 |
Ok |
QDialogButtonBox::Open |
0x00002000 |
Open |
QDialogButtonBox::Save |
0x00000800 |
Save |
QDialogButtonBox::Cancel |
0x00400000 |
Cancel |
QDialogButtonBox::Close |
0x00200000 |
Close |
QDialogButtonBox::Discard |
0x00800000 |
Discard |
QDialogButtonBox::Apply |
0x02000000 |
Apply |
QDialogButtonBox::Reset |
0x04000000 |
Reset |
QDialogButtonBox::RestoreDefaults |
0x08000000 |
RestoreDefaults |
QDialogButtonBox::Help |
0x01000000 |
Help |
QDialogButtonBox::SaveAll |
0x00001000 |
SaveAll |
QDialogButtonBox::Yes |
0x00004000 |
Yes |
QDialogButtonBox::YesToAll |
0x00008000 |
YesToAll |
QDialogButtonBox::No |
0x00010000 |
No |
QDialogButtonBox::NoToAll |
0x00020000 |
NoToAll |
QDialogButtonBox::Abort |
0x00040000 |
Abort |
QDialogButtonBox::Retry |
0x00080000 |
Retry |
QDialogButtonBox::Ignore |
0x00100000 |
Ignore |
QDialogButtonBox::NoButton |
0x00000000 |
NoButton |
常用的成员函数
(1)向按钮盒里添加按钮button,定义按钮button的角色为role,如果role无效,则不添加按钮,如果按钮已添加则移除并再次添加为新按钮。
void QDialogButtonBox::addButton(QAbstractButton * button, ButtonRole role)
(2)创建一个按钮的文本为text,以指定角色添加到按钮盒,并返回相应的按钮,如果role是无效的,就不创建按钮,返回0。
QPushButton * QDialogButtonBox::addButton(const QString & text, ButtonRole role)
(3)向按钮盒中添加一个标准按钮button,并返回标准按钮。如果按钮无效,不添加,返回0。
QPushButton * QDialogButtonBox::addButton(StandardButton button)
(4)清除按钮盒,删除所有按钮。
void QDialogButtonBox::clear()
(5)移出按钮盒里的按钮button,不删除,设置它的父窗口为0。
void QDialogButtonBox::removeButton(QAbstractButton * button)
(6)对应给定的按钮,返回标准按钮枚举值,如果给定的按钮并不是一个标准的按钮,则返回NoButton。
StandardButton QDialogButtonBox::standardButton(QAbstractButton * button) const
(7)返回按钮盒对应的标准按钮QPushButton,如果不是标准按钮,则返回0,表示该按钮在这个按钮盒子里不存在。在按钮盒的槽函数里,可以用该函数区分当前是哪一个按钮按下。
QPushButton * QDialogButtonBox::button(StandardButton which) const
按钮相关的信号
(1)单击按钮盒里的定义为AcceptRole(确定)和YesRole角色的按钮时,发射该信号。
void QDialogButtonBox::accepted()
(2)单击按钮盒里的按钮时,发射该信号
void QDialogButtonBox::clicked(QAbstractButton * button)
(3)单击按钮盒里的定义为HelpRole(帮助)角色的按钮时,发射该信号。
void QDialogButtonBox::helpRequested()
(4)单击按钮盒里的定义为RejectRole(拒绝)和(否)NoRole角色的按钮时,发射该信号。
void QDialogButtonBox::rejected()
打开 QtCreator,新建一个 Qt Widgets Application 项目,继承Qwidget类。编写例子程序,实现命令按钮的运用。(配套程序编号CH2-5)
widget.ui文件示例
图2-12 UI设计界面
widget.c文件(槽函数处理代码)
void Widget::on_buttonBox_clicked(QAbstractButton *button)
{
QString str="按钮盒测试";
QString button_str="点击的按钮=";
if(ui->buttonBox->button(QDialogButtonBox::Ok)==(QPushButton*)button)
{
//弹窗显示
button_str+="OK";
QMessageBox::information(this,str,button_str);
}
else if(ui->buttonBox->button(QDialogButtonBox::Cancel)==(QPushButton*)button)
{
button_str+="Cancel";
QMessageBox::information(this,str,button_str);
}
else if(ui->buttonBox->button(QDialogButtonBox::Open)==(QPushButton*)button)
{
button_str+="open";
QMessageBox::information(this,str,button_str);
}
}
运行效果
图2-13 运行效果