实例代码
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
void mySlot();
private:
QPushButton button1;
QPushButton* p_button2;
};
#endif // WIDGET_H```
#include “widget.h”
#include
#include <stdio.h>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
/*错误实例 以下方法创建的button无法再窗口中显示,因为构造函数这样创建窗口,控件生命周期在执行完构造函数后就没有了,会被自动析构掉
* 千万不要犯这样的错误
QPushButton button1;
button1.setParent(this);
button1.setText("_");
*/
button1.setParent(this);
button1.setText(“close”);
button1.move(100,100);
p_button2 = new QPushButton(this);
p_button2->setText("abc");
p_button2->move(200,200);
connect(&button1,&QPushButton::pressed,this,&Widget::close);
/*&button1:信号发出者,指针类型
* &QPushButton::pressed:处理的信号,&发送者类名::信号名字
* this::信号接收者
* &Widget::close:槽函数,信号处理函数 &接收的类名::槽函数名字
* /
/自定义槽,普通函数用法
* Qt5:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号没有返回值,所以槽函数一定没有返回值
*/
connect(p_button2,&QPushButton::released,this,&Widget::mySlot);
}
void Widget::mySlot()
{
p_button2->setText(“123”);
}
Widget::~Widget()
{
if(p_button2 != nullptr)//注意c++11使用nullptr表示null;
{
delete p_button2;
p_button2 = nullptr;
}
}
#include “widget.h”
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;//执行Widget的构造函数
w.show();
return a.exec();
}
Widget是主窗口,保存的有Subwindow的指针,可以直接操作;
subwindow是子窗口,由于子窗口没有主窗口指针,所以它需要给主窗口发送信号,然后主窗口在接收到信号后处理信号;