2.7 按钮控件

简介: 2.7 按钮控件

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

2.7.1 QAbstractButton

QAbstractButton是所有按钮的基类。

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

下面我们来看一下QAbstractButton的属性:

01ebd755782e4c909dad0843d3544acf.jpeg

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

01ebd755782e4c909dad0843d3544acf.jpeg

1. autoDefault:自动默认按钮。

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

2. default:是否为自动默认按钮。

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

2.7.2 QToolButton

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

01ebd755782e4c909dad0843d3544acf.jpeg

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

复选框按钮。

01ebd755782e4c909dad0843d3544acf.jpeg

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

2.7.5 示例

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

01ebd755782e4c909dad0843d3544acf.jpeg


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交流群,方便讨论学习。

相关文章
|
7月前
|
C# Windows
49.c#:StatusStrip 控件
49.c#:StatusStrip 控件
165 1
49.c#:StatusStrip 控件
|
7月前
|
C# Windows
47.c#:menustrip控件
47.c#:menustrip控件
72 1
|
7月前
|
C#
38.c#:RithTextBox控件
38.c#:RithTextBox控件
77 1
|
7月前
|
C# 开发者 Windows
48.c#:toolstrip控件
48.c#:toolstrip控件
126 1
|
JavaScript 前端开发
49EasyUI 窗口- 自定义带有工具条和按钮的对话框
49EasyUI 窗口- 自定义带有工具条和按钮的对话框
48 0
|
XML Java API
按钮和复选框控件
按钮和复选框控件
95 0
|
Android开发
fab按钮
牙叔教程 简单易懂
121 0
一个立体感的按钮样式
原文:一个立体感的按钮样式 ...
863 0
|
前端开发 容器
控件篇
原文:控件篇   日常使用最多的控件有6类: 1. 布局控件:可以容纳多个控件或嵌套其他布局控件,例如Grid、StackPanel、DockPanel等,有共同的父类Panel 2.
728 0
UWP 取消GridView、ListView鼠标选中、悬停效果
原文:UWP 取消GridView、ListView鼠标选中、悬停效果 因为经常碰到ListView或者ListBox之类的选中、鼠标悬停样式和自己设置的主题颜色不搭,这时就需要改变这些样式了. 而这里我通过ListView来说明,大致思路其实就是重新定义Item的Template。
1198 0