QT开发应用程序(7)-- QT的按钮和信号槽函数

1、创建一个基于Dialog的QT工程

在这里插入图片描述QT的按钮有五类:
QPushButton
QRadioButton
QCheckButton
QCommandLinkButton
QDialogButtonBox
还有工具条的QToolButton,在别的地方说明。

在界面上各类按钮创建一个实例,并在右侧属性栏中修改其名称和图标,也可修改其它属性,如下图所示:

在这里插入图片描述2,指定各个按钮的点击信号的槽函数
注意:
(1)同一个信号可以有多个槽函数
(2)多个信号可以有同一个槽函数

建立信号槽函数的方式:
(1) 函数名:on_按钮名_信号名
自动连接,不用调用connect函数
(2) 在对话框的编辑界面右击菜单点击【改变信号/槽】,增加一个函数名,然后在按钮的信号槽编辑界面指定它的槽函数。
(3) 调用connect函数代码方式指定信号槽函数

增加一个槽函数名:
在这里插入图片描述给按钮指定槽函数名
在这里插入图片描述
如下代码所示:
头文件

#ifndef DIALOG_H
#define DIALOG_H
 #include <QAbstractButton>

#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private slots:
    void on_myPushButton_clicked();
    void on_myCheckBox_clicked();
    void on_myRadioButton_clicked();
    void on_myCommandLinkButton_clicked();
    void on_myButtonBox_clicked(QAbstractButton *button);
    void on_button_clicked();
    void on_manual_clicked();
private:
    Ui::Dialog *ui;
};
#endif // DIALOG_H

CPP文件:

#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    connect(ui->myPushButton, SIGNAL(clicked()),this,SLOT(on_manual_clicked()));
    connect(ui->myCheckBox, SIGNAL(clicked()),this,SLOT(on_manual_clicked()));
}

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

/**********************************************
 **********************************************
      按钮的点击响应函数:on_按钮名_信号名
      这种方式不用调用connect函数显示指定
**********************************************
**********************************************/
void Dialog::on_myPushButton_clicked()
{
    QMessageBox::information(this, "title", "on_myPushButton_clicked");
}
void Dialog::on_myCheckBox_clicked()
{
    QMessageBox::information(this, "title", "on_myRadioButton_clicked");

    if(ui->myCheckBox->isChecked())
    {
        ui->myCheckBox->setText("I am Checked");
    }
    else
    {
         ui->myCheckBox->setText("I am not Checked");
    }
}
void Dialog::on_myRadioButton_clicked()
{

    QMessageBox::information(this, "title", "on_myRadioButton_clicked");
}
void Dialog::on_myCommandLinkButton_clicked()
{

    QMessageBox::information(this, "title", "on_myCommandLinkButton_clicked");
}
void Dialog::on_myButtonBox_clicked(QAbstractButton *button)
{
     if(ui->myButtonBox->button(QDialogButtonBox::Ok) == button)
     {

         QMessageBox::information(this, "title", "on_myButtonBox_clicked(OK)");
     }
     else
     {
         QMessageBox::information(this, "title", "on_myButtonBox_clicked(No)");
     }
}

/**********************************************
 **********************************************
      按钮的定制点击响应函数:在界面的对话框中创建函数,
                          在信号编辑界面指定信号的槽
      这种方式也不用调用connect函数显示指定
**********************************************
**********************************************/
void Dialog::on_button_clicked()
{
    QMessageBox::information(this, "title", "on_button_clicked");
}

/**********************************************
 **********************************************
      按钮的定制点击响应函数:手工在程序中用代码指定槽函数
**********************************************
**********************************************/
void Dialog::on_manual_clicked()
{
    QMessageBox::information(this, "title", "on_manual_clicked");
}

发布了30 篇原创文章 · 获赞 9 · 访问量 934

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105135807
今日推荐