解析
首先为什么会有QT信号槽?因为有这么一个使用环境:
当你做了某个动作,出触发一些事情,比如你在大街上亲了某个陌生女孩子,这时候会触发你挨巴掌这个事情。这就是信号槽最通俗的模型。
再说一下要如何构建这个场景:
- 需要>1个目标(也可以是一个目标,比如你自己抽自己巴掌)
- 需要有触发(你去亲陌生女孩子)
- 需要有反应事件(女孩子抽你,或者别人抽你)
把上面的事件串起来就是一个完整的信号槽应用环境,示意图如下:
想法(你->亲了女孩子->女孩子->抽你)
对应转换为QT就是:
connect(你,SIGNAL(亲女孩子),女孩子,SLOT(抽你))
- SIGNAL:就是你的动作
- SLOT:就是你的动作会触发的事件
这样你该知道它的原理了吧,以及它的应用场景了吧!
下面给你一个例子你去试试:
- 打开QT ->点击New Project
- 选择Application-》QT Widgets Application(意思是这是一个软件,是用Widget部件组成的一堆东西)
- 点击上面的choose...,然后输入项目名字、位置。点击下一步
- 如果你没有安装VS2015或者VS2017你就选择mingw那个就好
- 直接下一步就好,下个界面选完成
- 然后出来这个货:
- 点开mainwindow.h文件,全选替换以下代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QPushButton * you;
QWidget *nvhaizi;//这是拼音,谨防猪看不懂
public slots:
void ChouNi();//这是拼音,谨防猪看不懂
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
- 点开mainwindow.cpp文件,全选替换以下代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
nvhaizi=new QWidget(this);//得现有女孩子,你才能做这些非法的事情
you_ni=new QPushButton(QStringLiteral("你的动作"),nvhaizi);//表示你们在同一时间、同一场合
connect(you_ni,SIGNAL(clicked(bool)),this,SLOT(ChouNi()));//建立你们之间关系,你的动作,菇凉要做出的动作
nvhaizi->show();//让菇凉出来
}
MainWindow::~MainWindow()
{
delete ui;
}
//女孩子的动作,抽你
void MainWindow:: ChouNi()
{
QMessageBox::about(NULL, "动作", "女孩子抽了你一顿!");
}
- 然后点击QT主界面左下角的绿色三角,弹出界面选择save all
- 做你要做的事情点那个“你的动作”(记住!现实中不要轻易尝试该动作!除非你很帅!)
- 触发事件,女孩子抽你
以上就是QT信号槽最通俗易懂的例子了,除非你是猪!
每天进步一点,争取早日实现梦想。