1 新建一个工程
2 创建一个新的Widget 称为Sx
3 头文件继承自QWidget
#ifndef SX_H
#define SX_H
#include<QWidget>
class Sx : public QWidget
{
public:
Sx();
};
#endif // SX_H
4 创建Sx的栈对象,并显示出来
5 定义信号槽
#ifndef SX_H
#define SX_H
#include<QWidget>
class Sx : public QWidget
{
public:
Sx();
signals:
void clickEvent_001();
};
#endif // SX_H
6 重写mousePressEvent函数,利用其发射信号
sx.h:
#ifndef SX_H
#define SX_H
#include<QWidget>
class Sx : public QWidget
{
public:
Sx();
void mousePressEvent(QMouseEvent *event);
signals:
void clickEvent_001();
};
#endif // SX_H
sx.cpp
#include "sx.h"
#include<QMouseEvent>
Sx::Sx()
{
}
void Sx::mousePressEvent(QMouseEvent *event){
emit this->clickEvent_001();
}
7 定义信号处理函数(信号槽)
sx.h:
#ifndef SX_H
#define SX_H
#include<QWidget>
class Sx : public QWidget
{
public:
Sx();
void mousePressEvent(QMouseEvent *event);
signals:
void clickEvent_001();
public slots:
void clickEvent_001Process();
};
#endif // SX_H
sx.cpp//用QMessageBox作为提示弹窗
#include "sx.h"
#include<QMouseEvent>
#include<QMessageBox>
Sx::Sx()
{
}
void Sx::mousePressEvent(QMouseEvent *event){
emit this->clickEvent_001();
}
void Sx::clickEvent_001Process(){
QMessageBox::information(this,"Info",QStringLiteral("Hello World"),QMessageBox::Ok);
}
8 在构造里面连接信号与信号槽
sx.cpp
#include "sx.h"
#include<QMouseEvent>
#include<QMessageBox>
#include<QObject>
Sx::Sx()
{
QObject::connect(this,SIGNAL(clickEvent_001()),this,SLOT(clickEvent_001Process()));
}
void Sx::mousePressEvent(QMouseEvent *event){
emit this->clickEvent_001();
}
void Sx::clickEvent_001Process(){
QMessageBox::information(this,"Info",QStringLiteral("Hello World"),QMessageBox::Ok);
}
然后...构建项目,遇到第一个坑:
这个坑出现的原因是:
你的派生类也就是Sx必须声明Q_OBJECT的宏
回到sx.h
再次构建项目:
出现了更严重的问题
这个时候,你就会去百度...然后你就知道,你得把项目工程的编译文件全删了,重新构建就好了
删除掉它...
重新构建
这个时候就...十分干净了
运行点击这个Sx窗口,然后弹出个小窗,搞定...妈的,就这破Bug,我花了两个小时,心态炸了都