由于工程中涉及频繁的界面缩放和多语言支持,因此界面要使用代码实现,代码参考上一章中系统创建代码。
新建一个 QT命令行工程,完成后修改pro文件
QT += core gui //删除命令行参数,添加core和gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets // 意味不明 CONFIG += c++11 //其余不用修改 TARGET = test_in_code TEMPLATE = app SOURCES += main.cpp \ base.cpp HEADERS += \ base.h
修改main函数
#include <QApplication> #include "base.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); base w; w.show(); return a.exec(); }
新增base.h ,此处直接把两个界面放在一个文件内方便对比
#include <QObject> #include <QWidget> #include <QLabel> class child : public QWidget //子父界面都继承自QWidget { Q_OBJECT public: explicit child(QWidget *parent = 0);//留下父窗口指针 ~child(); private: QLabel* alabel; }; class base:public QWidget { Q_OBJECT public: explicit base(QWidget *parent = 0); ~base(); child* p_child; // 定义子窗口指针 };
base.cpp
#include "base.h" child::child(QWidget *parent) : QWidget(parent) { alabel = new QLabel(this); alabel->setText("find object"); alabel->move(30,30); this->resize(200,100); } child::~child(){} base::base(QWidget *parent) : QWidget(parent) { p_child = new child(this); p_child->show(); this->setWindowTitle("我才是主界面"); p_child->resize(400,300); this->show(); } base::~base(){}
执行结果
总结
- 子界面要向父界面覆盖需要留下QWidget* parent 参数已保留子窗口创建位置。
- 子窗口最好写入一个QWidget内方便后边槽连接。
- 子窗体自身show与不show其实是父窗口控制。