Qt使用信号和槽机制来完成对象之间的协同操作,说白了就是这边发射一个信号(操作),那边接受信号,并完成操作。好比我让你干什么事,你接到命令后就去干这个事。我们需要做以下几步。**首先头文件中声明这个槽函数,然后在.cpp文件中定义这个槽函数,也就是把需要做什么事这个活动内容写下来,最后在.cpp文件中的构造函数里面连接信号与槽,用connect()函数。**下面粘贴两端代码:
自动连接,不需要connect(),但是槽函数名需要设置成,举例:on_函数名_clicked
.h
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private:
Ui::MyWidget *ui;
public slots:
void on_showChildButton_clicked();
};
// MYWIDGET_H
.cpp
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::on_showChildButton_clicked()
{
QDialog *dialog = new QDialog(this);
dialog->show();
}
手动连接:需要connect()
.h
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private:
Ui::MyWidget *ui;
//声明槽
public slots:
void showChildDialog();
};
// MYWIDGET_H
.cpp
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{//构造函数
ui->setupUi(this);
connect(ui->showChildButton, &QPushButton::clicked,
this, &MyWidget::showChildDialog);//信号和槽连接
}
MyWidget::~MyWidget()
{//析构函数
delete ui;//释放
}
void MyWidget::showChildDialog()
{//函数内容
QDialog *dialog = new QDialog(this);
dialog->show();
}