需要注意的知识点:
需要五个文件 :main.cpp、mywidget.cpp、mywidget.h、mynewwidget.cpp、mynewwidget.h
main.cpp
#include "mywidget.h" #includeint 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" #includemyWidget::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 窗口类 #include 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 窗口类 class myNewWidget : public QWidget //继承,继承的语法要和初始化列表的语法区分 { Q_OBJECT //Q_OBJECT宏,用来支持类中使用信号与槽机制 public: //有参构造函数,默认参数在声明和实现只能有一个 myNewWidget(QWidget *parent = nullptr); ~myNewWidget();//析构函数 private: }; #endif // MYNEWWIDGET_H
程序运行仿真如下:



