2.1Qt基础按钮控件

16 篇文章 2 订阅
11 篇文章 0 订阅

2.1按钮控件组

QT Creator UI 设计界面的按钮组截图如下:

在这里插入图片描述

以下是对按钮组控件的一些功能介绍:

  1. Push Button 按压按钮:最普通的按钮,按(点击)按钮命令计算机执行一些动作,或者回答问题,比如

windows 开始菜单里的重启,注销,关机等按钮。

  1. Tool Button 工具按钮:工具按钮通常是一个集合,一般集成在工具栏里。比如打开,保存,复制,粘

贴,剪切等常用的操作。

  1. Radio Button 单选按钮:单选按钮通常是两个以上的形式出现在一块,按钮之间有互斥关系,每次只能

选中一个。比如:一个人的性别只能选择一个,不能同时是男性又是女性。

  1. Check Box 复选框:复选框与单选按钮概念相反,复选框通常表示多个可以同时存在的选项,比如一个

人可以同时拥有多个爱好,比如读书、看电影、爬山、游泳等。

  1. Command Link Button 命令链接按钮:一般用来打开的窗口或者网页链接。

  2. Dialog Button Box 标准按钮盒:标准按钮盒通常用于对话框程序;比如:常见的确认对话框有 “确定”

“取消”等标准按钮,Qt 将这些典型的按钮做成标准按钮盒,并将相应的信号加以封装,方便程序员

使用。

2.1.1QAbstractButton 类

在学习按钮控件之前必须先了解这些控件类的继承关系,QAbstractButton 类是所有按钮控件的基类,派生了

QCheckBox, QPushButton, QRadioButton, QToolButton 类。QAbstractButton 类继承于 QWidget,QWidget 类是所有用户界面对象的基类。 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按 Z 轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。以下介绍按钮类(QAbstractButton)常用接口函数和信号槽。

  • 函数接口

    1)设置按钮文本

    QString text() const//获取按钮上显示的文本
    void setText(const QString &text)//设置按钮上显示的文本
    

    2)设置按钮图标

    图标有QIcon类进行描述

    QIcon icon() const//用于显示当前按钮上显示的图标
    void setIcon(const QIcon &icon)//设置显示按钮
    

    3)设置图标显示尺寸

    图标的尺寸由类 QSize 表示。

    QSize iconSize() const
    void setIconSize(const QSize &size)
    

    4)判断按钮是否按下

    bool isDown() const
    void setDown(bool)
    

    按钮按下返回 true,否则返回 false。setDown(bool)用于手动设置按钮的状态。

    5)判断按钮是否选中

    bool isChecked() const
    void setChecked(bool)
    

    该属性只用于复选框按钮,isChecked()判断复选框按钮是否选中;

    setChecked()手动设置复选框的状态。当复选框的状态发生改变时将发出 toggled()信号。

    6)判断是否是复选按钮

    bool isCheckable() const
    void setCheckable(bool)
    

    该属性只用于复选框按钮,isCheckable()检查按钮是否可以复选。setCheckable(bool)设置按钮是否支持复选。

    7)设置按钮的可用性

    bool isEnabled() const
    void setEnabled(bool)
    

    该属性设置按钮是否可以使用;如果为假,按钮显示为灰色状态,无法使用。有些情况下,按钮需要等待一些条件成立才能使用,就可以使用 setEnabled 函数设置状态。

    8)设置按钮快捷键

    QKeySequence shortcut() const
    void setShortcut(const QKeySequence &key)
    

    QkeySequence 属性保存了按钮的快捷键方式,按下键盘上的组合键快速按下按钮。该属性在常用的软件中基本都能看到。

    例如:

    设置按钮的快捷方式为“ALT+F1";

    ui->pushButton->setShortcut(tr("Alt+F1"));
    
  • 按钮常用的槽函数(其他槽函数可以看QWidget类)

    1)执行一个点击事件

    void QAbstractButton::click()
    

    执行以上函数相当于执行了一个点击按钮的操作。与鼠标点击按钮效果一样

    2)切换按钮的状态

    void QAbstractButton::toggle()
    

    如果按钮是按下的状态,执行 toggle()函数按钮就变为松开状态,相反也一样。

  • 按钮常用的信号

    1)点击信号

    按钮按下后松开发出的信号(按下+松开才算一个点击动作)。

    void QAbstractButton::clicked(bool checked = false)
    

    2)按下信号

    void QAbstractButton::pressed()
    

    按钮按下后发出的信号。可用于检测按钮是否按下。

    3)释放信号

    void QAbstractButton::released()
    

    按钮松开发出的信号。可用于检测按钮是否松开

2.1.2QPushButton 按钮

QPushButton 按钮是最普通的按压按钮,使用的最为普遍,几乎图形界面都会用到。QPushButton 按钮通常是

一个矩形,并且显示一个文本标签描述本身的功能。

  1. 创建一个QPushButton 按钮示例

    QPushButton *button = new QPushButton("Download", this);
    
  2. QPushButton 按钮支持设置菜单显示,以下函数用于设置按钮显示菜单,后面章节会讲到该属性的使用

    案例。

void QPushButton::setMenu(QMenu *menu)
void QPushButton::showMenu()

​ 3.设置QPushButton按钮支持响应回车键

bool isDefault() const
void setDefault(bool)

相当于设置回车键为该按钮的快捷键,一般的对话框按钮都支持回车键确认

实例:

我们这里使用纯代码的形式创建一个按钮,将按钮的信号关联确切到槽,当按钮按下和松开的时候设置按钮显示的文本

打开 QtCreator,新建一个 Qt Widgets Application 项目,在新建项目的向导里填写:

①项目名称QtPushButton,创建的路径选择英文路径,点击下一步;

②套件选择里面选择全部套件,点击下一步;

③基类选择 QWidget,其他的选项默认,点击下一步;

④项目管理不修改,点击完成。

  • widget.h 文件代码:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QDebug>//用于打印输出
#include<QPushButton>//按钮

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QPushButton *mybutton;//定义指针
public slots://定义槽函数
    void QPushButton_released_Slots();
    void QPushButton_pressed_Slots();
    void QPushButton_clicked_Slots();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

  • widget.cpp文件代码:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建一个按钮对象
    mybutton = new QPushButton("QPushButton",this);
    //设置按钮的大小和位置
    mybutton->setGeometry(QRect(QPoint(50,50),QSize(200,50)));
    //将按钮发出的信号连接到确切的槽函数
    connect(mybutton,SIGNAL(released()),this,SLOT(QPushButton_released_Slots()));
    connect(mybutton,SIGNAL(pressed()),this,SLOT(QPushButton_pressed_Slots()));
    connect(mybutton,SIGNAL(clicked()),this,SLOT(QPushButton_clicked_Slots()));

    //设置响应的回车键
    mybutton->setDefault(true);
    //设置按钮获取输入焦点
    mybutton->setFocus();
    //设置阿牛快捷键
    mybutton->setShortcut(tr("Ctrl+p"));
}

Widget::~Widget()
{
    delete ui;
}
//槽函数:按钮松开
void Widget::QPushButton_released_Slots()
{
    //设置按钮上显示的文本
    mybutton->setText("按钮松开状态");
}
//槽函数:按钮按下
void Widget::QPushButton_pressed_Slots()
{
     mybutton->setText("按钮按下状态");
}
//槽函数:点击信号
void Widget::QPushButton_clicked_Slots()
{
     qDebug()<<"按钮被点击";
}

  • 运行效果

在这里插入图片描述

2.1.3 QRadioButton 按钮

QRadioButton 单选按钮一般用与多选一的互斥选择,可以通过 isChecked()函数检测是否选择;同一个父窗口内的单选按钮都是互斥的,每次只能选中一个。

⚫ 创建 QRadioButton 单选按钮示例:

QRadioButton *button =new QRadioButton("Radiobutton",this);

如果在同一个父窗口内需要定义多组单选按钮,需要使用 QButtonGroup 进行分组。QButtonGroup 类提供了一个按钮部件的抽象容器组,它不提供可视化显示功能,用来管理组中的每个按钮状态。

⚫ 新建分组示例:

QButtonGroup *gender_Group = new QButtonGroup(this); //新建分组
  1. 向分组中添加按钮使用 addButton 函数。addButton 函数原型如下:
void QButtonGroup::addButton(QAbstractButton *button, int id = -1)

参数:

QAbstractButton * button:QAbstractButton 按钮

id:设置单选按钮唯一的 id。(不能是负数,负数表示不设置 ID)

  1. 删除分组中的按钮使用 removeButton 函数
void QButtonGroup::removeButton(QAbstractButton *button)
  1. 获取 QButtonGroup 分组选中的 ID
int QButtonGroup::checkedId() const
  1. QButtonGroup 支持的信号
void buttonClicked(QAbstractButton *button) //分组中的按钮被点击,传递的为按钮的指针。
void buttonClicked(int id) //形参传递的是按钮 ID
void buttonPressed(QAbstractButton *button)//分组中的按钮被按下
void buttonPressed(int id)
void buttonReleased(QAbstractButton *button)//分组中的按钮松开
void buttonReleased(int id)

⚫ 打开 QtCreator,新建一个 Qt Widgets Application 项目,继承 Qwidget 类编写一个例子程序,实现单选按钮的运用。

  1. widget.ui 界面文件设计示例

在这里插入图片描述
2.widget.h 文件代码示例

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QButtonGroup>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
 Q_OBJECT
public:
 explicit Widget(QWidget *parent = 0);
 ~Widget();
 QButtonGroup *gender_Group; //性别选择组
 QButtonGroup *marriage_Group; //婚姻状况选择组
private slots:
 void on_pushButton_ok_clicked();
 void gender_Group_slots(int id); //槽函数
 void marriage_Group_slots(int id);
private:
 Ui::Widget *ui;
};
#endif // WIDGET_H

3.widget.cpp 文件代码示例

#include "widget.h"
#include "ui_widget.h"
#include<QMessageBox>//消息对话框


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //性别选择组--新建分组,向分组中添加按钮使用addButton函数
    gender_Group = new QButtonGroup(this);
    gender_Group->addButton(ui->radioButton_boy,0);//添加按钮,设置ID
    gender_Group->addButton(ui->radioButton_girl,1);

    //婚姻状况选择组
    marriage_Group = new QButtonGroup(this);
    marriage_Group->addButton(ui->radioButton_not,0);
    marriage_Group->addButton(ui->radioButton_ok,1);

    //关联三个分组的信号与槽
    connect(gender_Group,SIGNAL(buttonClicked(int)),this,SLOT(gender_Group_slots(int)));
    connect(marriage_Group,SIGNAL(buttonClicked(int)),this,SLOT(marriage_Group_slots(int)));
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_ok_clicked()));


}

Widget::~Widget()
{
    delete ui;
}



void Widget::on_pushButton_ok_clicked()
{
    QString str;//存放显示的结果
    int genderID = gender_Group->checkedId();//获取分组中的ID
    int marriageID=marriage_Group->checkedId();

    //根据按下的ID区分按键
    switch (genderID) {
    case 0:
        str+="性别:男\n";
        break;
    case 1:
        str+="性别:女\n";
        break;
    default:
        break;
    }

    switch (marriageID) {
    case 0:
       str+="婚姻状况:未婚\n";
        break;
    case 1:
        str+="婚姻状况:已婚\n";
        break;
    default:
        break;
    }

    //弹出消息框
    QMessageBox::information(this,tr("选择结果"),str,QMessageBox::Ok);
}


//性别选择
void Widget::gender_Group_slots(int id)
{
    QString str;
    //根据按下的ID区分按键
    switch (id) {
    case 0:
        str+="性别:男\n";
        break;
    case 1:
        str+="性别:女\n";
        break;
    default:
        break;
    }
    //弹出消息框
    QMessageBox::information(this,tr("选择结果"),str,QMessageBox::Ok);
}



//分组选择
void Widget::marriage_Group_slots(int id)
{
    QString str;
    switch (id) {
    case 0:
        str+="婚姻状况:未婚";
        break;
    case 1:
        str+="婚姻状况:已婚";
        break;
    default:
        break;
    }
    //弹出消息框
    QMessageBox::information(this,tr("选择结果"),str,QMessageBox::Ok);
}



4.运行效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.4 checkBox 按钮

复选按钮的选项可以多选,,而且多个复选按钮之间是不冲突的,复选按钮状态发生改变时,会发出 toggled()信号,按钮的基本使用方法与单选按钮一样。如果使用了多组复选按钮可以使用 groupBox 控件进行分组,groupBox 控件不会改变复选框的属性。复选框使用了 QButtonGroup 进行分组,就变成了单选按钮。

⚫ 创建复选按钮示例:

QCheckBox *checkbox = new QCheckBox("sensitive", this);

复选按钮除了普通的选择以外,还提供了三态效果;用来表示未选中、选中、全部选中三种显示效果。相关的函数接口如下:

  1. 判断按钮是否支持三态显示
void setTristate(bool y = true);
bool isTristate() const;

支持三态显示返回 true,否则返回 false。可以通过 setTristate 函数决定按钮是否支持三态显示。

  1. 获取三态复选框的状态
void QCheckBox::setCheckState(Qt::CheckState state)
Qt::CheckState QCheckBox::checkState() const

setCheckState 用于设置状态,checkState()用于获取状态。

三态复选框的状态枚举 enum Qt::CheckState 共有三个枚举常量

枚举常量数值描述
Qt::Unchecked0未选中
Qt::PartiallyChecked1选择部分
Qt::Checked2全部选中
  1. 三态复选框状态改变信号
void QCheckBox::stateChanged(int state)

stateChanged 信号发出时就表示三态复选按钮的状态发生了改变,state 参数就表示当前的状态。

实例:

  • 创建一个新项目,继承Qwidget类,实现复选按钮

    1)widget.ui文件设计界面示例

    控件:gruopBox,单文本编辑器lineEdit

    作用:gruopBox是一个带有标题的分组框,lineEdit用来获取输入的文本

在这里插入图片描述
2) widget.h 文件代码示例

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots://槽函数
    void on_pushButton_showresult_clicked();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

  1. widget.cpp 文件代码示例
#include "widget.h"
#include "ui_widget.h"

#include<QMessageBox>//消息对话框
#include<QDebug>//调试

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置按钮支持三态显示
    ui->checkBox_showstate->setTristate(true);
    //设置单选按钮的默认状态
    ui->radioButton_boy->setChecked(true);

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_showresult_clicked()));
}

Widget::~Widget()
{
    delete ui;
}

//显示选择结果
void Widget::on_pushButton_showresult_clicked()
{
    int count=0; //记录选择的数量
    QString text="选择结果:\n"; //存放选择结果
    /**************姓名***************/
    text+="姓名: ";
    text+=ui->lineEdit->text();
    text+="\n";
    /**************性别***************/
    text+="性别: ";
    if(ui->radioButton_boy->isChecked())
    {
        text+="男\n";
    }
    if(ui->radioButton_lady->isChecked())
    {
        text+="女\n";
    }
    /**************兴趣爱好***************/
    text+="兴趣爱好: \n";
    if(ui->checkBox->isChecked())
    {
        text+="羽毛球 ";
        count++;
    }
    if(ui->checkBox_2->isChecked())
    {
        text+="看书 ";
        count++;
    }
    if(ui->checkBox_3->isChecked())
    {
        text+="游泳 ";
        count++;
    }
    if(ui->checkBox_4->isChecked())
    {
        text+="玩游戏 ";
        count++;
    }
    if(ui->checkBox_5->isChecked())
    {
        text+="骑行 ";
        count++;
    }
    if(ui->checkBox_6->isChecked())
    {
        text+="旅游 ";
        count++;
    }
    text+="\n";
    /*弹出消息框*/
    QMessageBox::information(this, tr("选择结果"),text,QMessageBox::Ok);
    /*设置三态显示*/
    switch(count)
    {
    case 0://未选中
        ui->checkBox_showstate->setCheckState(Qt::Unchecked);
        break;
    case 1://部分选中
        ui->checkBox_showstate->setCheckState(Qt::PartiallyChecked);
        break;
    case 6: //全选
        ui->checkBox_showstate->setCheckState(Qt::Checked);
        break;
    }
}

  1. 运行效果
    在这里插入图片描述

2.1.5 commandLinkButton 按钮

CommandLinkButton 控件(命令链接按钮)继承自 QPushButton,CommandLinkButton 控件是一种 Windows Vista 风格的命令链接按钮,它和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的按钮上的文字描述文本外,默认情况下,它也将携带一个箭头图标,表明按下按钮将打开另一个窗口或页面,图标可以通过 setIcon 函数进行更换设置。

  • 创建CommandLinkButton 按钮示例:

    QCommandLinkButton *linkbutton = new QCommandLinkButton("主文本显示","扩展文本显示", this);
    linkbutton->setGeometry(QRect(QPoint(50,50), QSize(200, 80))); //设置按钮的显示位置与大小
    
  1. 可以通过 setDescription 函数可以设置命令按钮扩展的文本描述信息,扩展显示通常会比当前字体稍小,一般用来描述按钮的详细功能。
QString description() const 获取命令按钮上扩展显示的文本
void setDescription(const QString & description) 设置命令按钮显示扩展的文本
  • 命令按钮表明按下将打开另一个窗口或页面,这个功能需要通过静态函数 openUrl 实现。

使用 openUrl 需要包含#include <QDesktopServices>头文件

openUrl 函数原型:

bool QDesktopServices::openUrl(const QUrl & url) 如果成功返回 true,否则返回 false

参数解析:

QUrl 是用于描述网页链接或本地文件链接的类。使用 QUrl 需要包含#include <QUrl>头文件。

1)打开一个网站示例

QDesktopServices::openUrl( QUrl("https://www.baidu.com/"));

2)打开一个windows下的文件夹示例

QDesktopServices::openUrl( QUrl("file:///D:/QT_XX"));

file:///是三根右斜杠,表示打开本地文件系统里的文件夹或文件。URL 里面全部是用右斜杠。

示例:

1)创建一个继承Widget的项目,实现命令按钮的运用
2)ui界面
在这里插入图片描述
2)widget.cpp代码

#include "widget.h"
#include "ui_widget.h"
#include<QDesktopServices>//使用openUrl需要的头文件
#include<QUrl>//使用QUrl包含的头文件

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
        ui->setupUi(this);
     //通过代码编写的方式,创建按钮
     QCommandLinkButton *btn = new QCommandLinkButton("主文本显示","扩展文本显示", this);
     btn->setGeometry(QRect(QPoint(400,50), QSize(200, 200))); //设置按钮的显示位置与大小
     btn->setText("打开网页");   //修改标题主文本显示
     btn->setDescription("https://www.bilibili.com/");  //修改描述

     connect(btn,SIGNAL(clicked()),this,SLOT(on_btn_clicked()));
}

Widget::~Widget()
{
    delete ui;
}
//打开网页
void Widget::on_commandLinkButton_clicked()//右键单击槽自动生成的槽函数
{
    //用来显示命令按钮扩展的文本信息内容,字体比当前字体稍小
    QDesktopServices::openUrl(QUrl("http://www.baidu.com/"));
}
//打开目录
void Widget::on_commandLinkButton_openDir_clicked()
{

     QDesktopServices::openUrl(QUrl("file:///D:/"));

}
void Widget::on_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("https://www.bilibili.com/"));
}

3)widget.h代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:

private slots:
    void on_commandLinkButton_clicked();//自动关联

    void on_commandLinkButton_openDir_clicked();

    void on_btn_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

4)运行结果
打开网页或者打开目录会进行相应的跳转
在这里插入图片描述

2.1.6 buttonBox 按钮盒

按钮盒(ButtonBox)可以很方便地快速布置一组标准按钮,比如:常见的确认对话框有 “OK”“Cancel”等标准按钮,Qt 将这些典型的按钮做成标准按钮盒,并将相应的信号加以封装,方便程序员使用,它有水平和垂直两种样式。

  • 创建ButtonBox按钮盒示例

    按钮盒标准按钮的枚举值:

    常量数值描述
    QDialogButtonBox::Ok0x00000400Ok
    QDialogButtonBox::Open0x00002000Open
    QDialogButtonBox::Save0x00000800Save
    QDialogButtonBox::Cancel0x00400000Cancel
    QDialogButtonBox::Close0x00200000Close
    QDialogButtonBox::Discard0x00800000Discard
    QDialogButtonBox::Apply0x02000000Apply
    QDialogButtonBox::Reset0x04000000Reset
    QDialogButtonBox::RestoreDefaults0x08000000RestoreDefaults
    QDialogButtonBox::Help0x01000000Help
    QDialogButtonBox::SaveAll0x00001000SaveAll
    QDialogButtonBox::Yes0x00004000Yes
    QDialogButtonBox::YesToAll0x00008000YesToAll
    QDialogButtonBox::No0x00010000No
    QDialogButtonBox::NoToAll0x00020000NoToAll
    QDialogButtonBox::Abort0x00040000Abort
    QDialogButtonBox::Retry0x00080000Retry
    QDialogButtonBox::Ignore0x00100000Ignore
    QDialogButtonBox::NoButton0x00000000NoButton
  • 常用的成员函数

    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)
  1. 单击按钮盒里的定义为 HelpRole(帮助)角色的按钮时,发射该信号。
void QDialogButtonBox::helpRequested()

4)单击按钮盒里的定义为 RejectRole(拒绝)和(否)NoRole 角色的按钮时,发射该信号。

void QDialogButtonBox::rejected()

示例:实现命令按钮的运用

1)ui 界面的设计

双击widget.ui进入页面设计,选择Buttons中 的Dialog Button Box 拖拽到界面上,在右下角的属性中找到选择标准按钮值standardButtons选择所需要的

选择完成后,会自动添加到界面上。

在这**加粗样式**里插入图片描述
2)头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QAbstractButton>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    //单击控件右键转到槽函数
    void on_buttonBox_clicked(QAbstractButton *button);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

3)widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include<QDialogButtonBox>
#include<QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_buttonBox_clicked(QAbstractButton *button)
{
    QString str = "按钮盒测试";
    QString btn_str = "点击的按钮";
    if(ui->buttonBox->button(QDialogButtonBox::Ok)==(QPushButton*)button)
    {
        //消息对话框提示
        btn_str+="ok";
        QMessageBox::information(this,str,btn_str);
    }
    else if(ui->buttonBox->button(QDialogButtonBox::Cancel)==(QPushButton*)button)
    {
        btn_str+="cancel";
        QMessageBox::information(this,str,btn_str);
    }
    else if(ui->buttonBox->button(QDialogButtonBox::Open)==(QPushButton*)button)
    {
        btn_str+="open";
        QMessageBox::information(this,str,btn_str);
    }

}

4)运行效果

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最没脑子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值