今天小豆君来讲一下我们常用的按钮控件。
2.7.1 QAbstractButton
QAbstractButton是所有按钮的基类。
在生活中,我们看到有的按钮直接按下松开时,按钮会迅速弹起,有时也会看到按钮被点击松开后,按钮处于被按下的状态。对于以上两种描述,如果在Qt中,则会分别发出一个clicked()信号和toggled()信号。按钮被按下时会发出pressed()信号,按钮松开时会发出released()信号。
下面我们来看一下QAbstractButton的属性:
1. autoExclusive:是否启用自动排他性。
- 当有很多按钮时,并且被设置了checkable为true,我希望在同一时间,我只能按下其中的一个按钮,如果按下另一个按钮,那先前被按下的按钮会自动弹起,将autoExclusive设置为true是个很好的选择。
- 这些按钮需要有相同的父控件。
- 使用QButtonGroup也可以做到这一点。
2. autoRepeat, autoRepeatDelay, autoRepeatInterval:
- 如果启用了autoRepeat,那么pressed()、release()和clicked()的信号会在按钮按下时定时发出。autoRepeat默认是false。最初的延迟和重复间隔由autoRepeatDelay和autoRepeatInterval保存,都以毫秒为单位。注意按钮一直处于按下状态时才会触发。如果按钮松开,则会关闭。
3. checkable:是否可以被按下。
4. checked:是否可以被勾选,只有checkbox中会用到。
5. down:是否处于按下状态。
6. icon:按钮对应的图标。
7. iconSize:图标大小。
8. shortCut:快捷键。还可以调用setShortcut设置快捷键。
9. text:按钮文本。
- 如果文本包含一个&字符,则会自动为它创建一个快捷键。“&”后面的字符将用作快捷键。使用“& &”来显示实际的“& &”。
2.7.1 QPushButton
1. autoDefault:自动默认按钮。
- 当在一个对话框中,用户输入完信息后,想要点击回车确认,则这时可以设置OK按钮的autoDefault为true。
2. default:是否为自动默认按钮。
3. flat:是否为扁平状态。如果为true,则会去掉按钮的边框。
2.7.2 QToolButton
工具按钮,工具按钮主要用在主窗口的工具栏中,一个工具按钮通常会显示一个图标,这个图标就代表了具体的操作。工具按钮还可以增加一个QMenu菜单,这时会在按钮的右下方多了一个小箭头,你也可以设置小箭头的形状和弹出菜单的方式。
1. arrowType:菜单提示的小箭头类型。
- Qt::NoArrow:无箭头。
- Qt::UpArrow:箭头向上。
- Qt::DownArrow:箭头向下。
- Qt::LeftArrow:箭头向左。
- Qt::RightArrow:箭头向右。
2. autoRaise:自动突起。
3. pupupModel:菜单弹出模式。
- QToolButton::DelayedPopup:当鼠标点击按钮一段时间后,才弹出菜单。
- QToolButton::MenuButtonPopup:这个模式下会有一个小箭头显示在按钮右下角,用来提示点击按钮可以弹出一个菜单。
- QToolButton::InstantPopup:点击按钮立刻弹出菜单,这样的话按钮本身的点击功能将无效。
4. toolButtonStyle:图标和文字的排版模式。
- Qt::ToolButtonIconOnly:只显示标签。
- Qt::ToolButtonTextOnly:只显示文字。
- Qt::ToolButtonTextBesideIcon:文字显示在标签旁边。
- Qt::ToolButtonTextUnderIcon:文字显示在标签下面。
- Qt::ToolButtonFollowStyle:依赖样式的设置。
2.7.3 QRadioButton
单选按钮,QRadioButton否启用自动排他性。
2.7.4 QCheckBox
复选框按钮。
tristate:是否为三种状态。三态即:全选,全不选,部分勾选。在树控件中,常会用到三态。
2.7.5 示例
新建Gui项目ButtonsWidget,类名为ButtonsWidget,继承自QWidget。
buttonswidget.h
#ifndef BUTTONSWIDGET_H #define BUTTONSWIDGET_H #include <QWidget> namespace Ui { class ButtonsWidget; } class ButtonsWidget : public QWidget { Q_OBJECT public: explicit ButtonsWidget(QWidget *parent = 0); ~ButtonsWidget(); private slots: void on_pushButton_clicked(); void on_check_flat_stateChanged(int arg1); private: Ui::ButtonsWidget *ui; }; #endif // BUTTONSWIDGET_H
buttonswidget.cpp
#include "buttonswidget.h" #include "ui_buttonswidget.h" ButtonsWidget::ButtonsWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ButtonsWidget) { ui->setupUi(this); //启动自动点击按钮 ui->pushButton->setAutoRepeat(true); //按下按钮不松开,2秒后开始自动发送信号 ui->pushButton->setAutoRepeatDelay(2000); //每隔1秒发送一次点击信号 ui->pushButton->setAutoRepeatInterval(1000); } ButtonsWidget::~ButtonsWidget() { delete ui; } void ButtonsWidget::on_pushButton_clicked() { int val = ui->spinBox->value(); ui->spinBox->setValue(val+1); } void ButtonsWidget::on_check_flat_stateChanged(int arg1) { ui->pushButton->setFlat(arg1==Qt::Checked); }
运行程序,长时间按住pushButton,看看有什么效果。
好了,关于按钮控件的内容就讲到这里,如果你想第一时间看到小豆君的技术分享,就赶快关注吧。
欢迎关注小豆君的微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。