2.7 按钮控件

今天小豆君来讲一下我们常用的按钮控件。

2.7.1 QAbstractButton

QAbstractButton是所有按钮的基类。
在生活中,我们看到有的按钮直接按下松开时,按钮会迅速弹起,有时也会看到按钮被点击松开后,按钮处于被按下的状态。对于以上两种描述,如果在Qt中,则会分别发出一个clicked()信号和toggled()信号。按钮被按下时会发出pressed()信号,按钮松开时会发出released()信号。
下面我们来看一下QAbstractButton的属性:

2.7 按钮控件_第1张图片
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.2 QPushButton

1. autoDefault:自动默认按钮。
当在一个对话框中,用户输入完信息后,想要点击回车确认,则这时可以设置OK按钮的autoDefault为true。

2. default:是否为自动默认按钮。
3. flat:是否为扁平状态。如果为true,则会去掉按钮的边框。

2.7.3 QToolButton

工具按钮,工具按钮主要用在主窗口的工具栏中,一个工具按钮通常会显示一个图标,这个图标就代表了具体的操作。工具按钮还可以增加一个QMenu菜单,这时会在按钮的右下方多了一个小箭头,你也可以设置小箭头的形状和弹出菜单的方式。

2.7 按钮控件_第2张图片
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.4 QRadioButton

单选按钮,QRadioButton否启用自动排他性。

2.7.5 QCheckBox

复选框按钮。

tristate:是否为三种状态。三态即:全选,全不选,部分勾选。在树控件中,常会用到三态。

2.7.6 示例

新建Gui项目ButtonsWidget,类名为ButtonsWidget,继承自QWidget。


2.7 按钮控件_第3张图片

buttonswidget.h

#ifndef BUTTONSWIDGET_H
#define BUTTONSWIDGET_H
#include 

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,看看有什么效果。
好了,关于按钮控件的内容就讲到这里。

更多分享请关注微信公众号:跟小豆君学Qt
知乎:小豆君的干货铺

你可能感兴趣的:(2.7 按钮控件)