1.测试工程配置

创建名为QtGuiAppTest的qwidget工程,带ui文件
在这里插入图片描述

2. 成员函数

由于QAbstractButton为抽象类,无法实例化,因此用例中选用QAbstractButton的一个子类QPushButton实现。

2.1 void setText(const QString &text)

(1)功能说明
设置按钮上的文字。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.pushButton->setText(QString::fromLocal8Bit("测试按钮"));
}

2.2 void setIcon(const QIcon &icon)

(1)功能说明
给按钮添加图标。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
     ui.pushButton->setIcon(QIcon(":/Resources/980.jpg"));
}

先在qrc文件中添加图片资源。

2.3 槽函数 void setIconSize(const QSize &size)

(1)功能说明
设置按钮的图标大小。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);   
    //添加图标
    ui.pushButton->setIcon(QIcon(":/Resources/980.jpg"));
    //设置图标大小
    ui.pushButton->setIconSize(QSize(40, 60));
}

2.4 void setDown(bool)

(1)功能说明
默认为false,如果传参为true,则将按钮设置为按下的状态。在这种情况下,按钮是不会发出pressed()和 clicked()信号的。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.pushButton->setDown(true);
}

2.5 void setCheckable(bool)

(1)功能说明
默认参数为false,传入true,将按钮设置为可勾选的(即点击一次,按钮一致处于按下状态,除非再次点击才会弹出)。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.pushButton->setCheckable(true);
}

2.6 void setAutoRepeat(bool)

(1)功能说明
默认置为false。如果设置为true,则当按钮被按下后, pressed(), released(), 和 clicked()信号会在指定的时间间隔重复发出。初始延迟和重复间隔时间单位都是毫秒,初始延迟由 autoRepeatDelay设置,重复时间间隔由autoRepeatInterval设置。
(2)效果展示
在这里插入图片描述

设置了开始延迟1秒,重复间隔为2秒,可以看到label中的文本在按钮按下1秒后开始变化,之后每隔2秒变化一次。
(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    m_nCount = 0;
    //启用重复发送信号机制
    ui.pushButton->setAutoRepeat(true);
    //设置开始发信号前的时间延迟
    ui.pushButton->setAutoRepeatDelay(1000);
    //设置重复信号之间的时间间隔
    ui.pushButton->setAutoRepeatInterval(2000);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest);
}
void QtGuiAppTest::SlotTest()
{
    m_nCount++;
    ui.label->setText("number:" +  QString::number(m_nCount));
}

2.7 void setAutoRepeatDelay(int)

参考第2.6节。

2.8 void setAutoRepeatInterval(int)

参考第2.6节。

2.9 void setAutoExclusive(bool)

(1)功能说明
同一个窗口多个可勾选按钮的行为如同在同一个独占按钮组中。在同一个独占按钮组中只有一个按钮可以处于被选中(按下)的状态,选中另一个按钮,则前一个被选中的就会自动取消选中状态。
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.pushButton->setCheckable(true);
    ui.pushButton->setAutoExclusive(true);
    ui.pushButton_2->setCheckable(true);
    ui.pushButton_2->setAutoExclusive(true);
    ui.pushButton_3->setCheckable(true);
    ui.pushButton_3->setAutoExclusive(true);
}

2.10 void setShortcut(const QKeySequence &key)

(1)功能说明
给按钮设置快捷键。
(2)效果展示
给按钮设置了ctrl+B的快捷键,按下快捷键显示弹窗。
在这里插入图片描述

(3)调用程序

#include "QtGuiAppTest.h"
#include<qmessagebox.h>
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    ui.pushButton->setShortcut(QKeySequence(Qt::CTRL +  Qt::Key_B));
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest);
}
void QtGuiAppTest::SlotTest()
{
    QMessageBox::information(this, "test", "shortcut");
}

2.11 QString text() const

获取给按钮上添加的文本。

2.12 QKeySequence shortcut() const

获取给按钮添加的快捷键。

2.13 bool isDown() const

判断按钮是否按下的状态,如果按钮处于按下的状态,则返回的是true。

2.14 bool isChecked() const

判断按钮是否被选中,只有按钮设置了checkable,该函数才有效。

2.15 bool isCheckable() const

判断按钮是否被设置为了可勾选。

2.16 QSize iconSize() const

获取按钮上图标的大小。

2.17 QIcon icon() const

获取按钮上的图标。

2.18 QButtonGroup * group() const

返回按钮所属的组,如果按钮不属于任何组,则返回nullptr。

2.19 bool autoRepeat() const

判断按钮是否设置了可重复触发信号。

2.20 int autoRepeatDelay() const

获取触发信号之前的时间延迟。

2.21 int autoRepeatInterval() const

获取信号重复发信号的时间间隔。

2.22 bool autoExclusive() const

判断按钮是否设置为独占模式。

2.23 槽函数 void animateClick(int msec = 100)

(1)功能说明
设置按钮按下msec毫秒
(2)效果展示
在这里插入图片描述

点击第一个按钮,触发第二个按钮按下2秒
(3)调用程序
QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTest1();
signals:
    void SigBtnReleaseDelay(double ms);
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //第一个按钮点击信号与槽函数SlotTest1连接
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest1);
    //信号SigBtnReleaseDelay与第二个按钮的animateClick槽函数连接
    connect(this, &QtGuiAppTest::SigBtnReleaseDelay,  ui.pushButton_2, &QPushButton::animateClick);
}
void QtGuiAppTest::SlotTest1()
{
        //输出SigBtnReleaseDelay信号,并填写参数2000毫秒
    emit SigBtnReleaseDelay(2000);
}

2.24 槽函数 void click()

该槽函数执行按钮点击操作,且与按钮点击关联的信号都会发出去。如果这个按钮是可勾选的(checkable),则该函数执行后表现为按钮状态改变。

2.25 槽函数 void toggle()

(1)功能说明
切换按钮按下和弹出的状态
(2)效果展示
在这里插入图片描述

(3)调用程序

QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTest1();
signals:
    void SigBtnToggle();
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //设置按钮2为可选的
    ui.pushButton_2->setCheckable(true);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest1);
    connect(this, &QtGuiAppTest::SigBtnToggle,  ui.pushButton_2, &QPushButton::toggle);
}
void QtGuiAppTest::SlotTest1()
{
    emit SigBtnToggle();
}

2.26 槽函数 void setChecked(bool)

(1)功能说明
设置按钮被按下。前提是按钮通过setCheckable(bool)设置为可勾选,该槽函数才生效
(2)效果展示
在这里插入图片描述

点击第一个按钮,第二个按钮被按下
(3)调用程序
QtGuiAppTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtGuiAppTest.h"
class QtGuiAppTest : public QWidget
{
    Q_OBJECT
public:
    QtGuiAppTest(QWidget *parent = Q_NULLPTR);
public slots:
    void SlotTest1();
signals:
    void SigBtnCheck(bool ck);
private:
    Ui::QtGuiAppTestClass ui;
};

QtGuiAppTest.cpp

#include "QtGuiAppTest.h"
QtGuiAppTest::QtGuiAppTest(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //设置按钮2为可选的
    ui.pushButton_2->setCheckable(true);
    connect(ui.pushButton, &QPushButton::clicked, this,  &QtGuiAppTest::SlotTest1);
    connect(this, &QtGuiAppTest::SigBtnCheck,  ui.pushButton_2, &QPushButton::setChecked);
}
void QtGuiAppTest::SlotTest1()
{
    emit SigBtnCheck(true);
}

2.27 信号 void pressed()

按钮按下会发出该信号

2.28 信号 void released()

按钮弹出会发出该信号

2.29 信号 void toggled(bool checked)

按钮状态切换会发出该信号

2.30 信号 void clicked(bool checked = false)

当click()或animateClick()被调用或键入快捷键,按钮发出该信号。如果调用了setDown(), setChecked(),toggle(),则信号不会发出。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐