需要注意的知识点:
需要五个文件 :main.cpp、mywidget.cpp、mywidget.h、mynewwidget.cpp、mynewwidget.h
main.cpp
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QApplication app(argc, argv);
myWidget w;//执行MainWidget的构造函数
w.show();
return app.exec();
}
mywidget.cpp
#include "mywidget.h"
#include "mynewwidget.h"
#include <QPushButton>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)//这个在C++语法中被称为初始化列表
{
//设置固定窗口大小 -- 用户不可通过拖拽来调整窗口的大小
setFixedSize(600,400);
//设置窗口的标题
setWindowTitle("第一个窗口");
//resize、setFixedSize、setWindowTitle都是当前窗口的方法,
//所以在前面加不加this(写成 this->resize ...)都行.
btn->setParent(this);
btn->setText("打开");
btn->move(250,150);//移动到(250,150)的位置,坐标系统为LCD坐标
myNewWidget *new_win = new myNewWidget();
connect(btn,&QPushButton::released,this,[=](){
this->ToggleWindow(new_win);
});
}
void myWidget::ToggleWindow(QWidget *widget)
{
widget->setWindowTitle("我是新窗口");
widget->setFixedSize(400,400);
if(flag)
{
widget->show();
flag = false;
btn->setText("关闭");
}
else
{
widget->close();
flag = true;
btn->setText("打开");
}
}
myWidget::~myWidget()
{
}
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget> //包含头文件 QWidget 窗口类
#include <QPushButton>
class myWidget : public QWidget //继承,继承的语法要和初始化列表的语法区分
{
Q_OBJECT //Q_OBJECT宏,用来支持类中使用信号与槽机制
public:
//有参构造函数,默认参数在声明和实现只能有一个
myWidget(QWidget *parent = nullptr);
~myWidget();//析构函数
QPushButton* btn =new QPushButton();
void ToggleWindow(QWidget *widget);
bool flag = true; //判断窗口状态
private:
};
#endif // MYWIDGET_H
mynewwidget.cpp
#include "mynewwidget.h"
myNewWidget::myNewWidget(QWidget *parent)
: QWidget(parent)//这个在C++语法中被称为初始化列表
{
}
myNewWidget::~myNewWidget()
{
}
mynewwidget.h
#ifndef MYNEWWIDGET_H
#define MYNEWWIDGET_H
#include <QWidget> //包含头文件 QWidget 窗口类
class myNewWidget : public QWidget //继承,继承的语法要和初始化列表的语法区分
{
Q_OBJECT //Q_OBJECT宏,用来支持类中使用信号与槽机制
public:
//有参构造函数,默认参数在声明和实现只能有一个
myNewWidget(QWidget *parent = nullptr);
~myNewWidget();//析构函数
private:
};
#endif // MYNEWWIDGET_H
程序运行仿真如下: