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");
}