02 使用代码实现子界面向父界面覆盖

来源:互联网 发布:书生商友软件下载 编辑:程序博客网 时间:2024/06/05 00:21

由于工程中涉及频繁的界面缩放和多语言支持,因此界面要使用代码实现,代码参考上一章中系统创建代码。

  1. 新建一个 QT命令行工程,完成后修改pro文件

    QT       += core gui  //删除命令行参数,添加core和guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets // 意味不明CONFIG += c++11 //其余不用修改TARGET = test_in_codeTEMPLATE = appSOURCES += main.cpp \base.cppHEADERS += \base.h
  2. 修改main函数

    #include <QApplication>#include "base.h"int main(int argc, char *argv[]){    QApplication a(argc, argv);    base w;    w.show();    return a.exec();}
  3. 新增base.h ,此处直接把两个界面放在一个文件内方便对比

    #include <QObject>#include <QWidget>#include <QLabel>class child : public QWidget //子父界面都继承自QWidget{    Q_OBJECTpublic:    explicit child(QWidget *parent = 0);//留下父窗口指针    ~child();private:    QLabel* alabel;};class base:public QWidget{    Q_OBJECTpublic:     explicit base(QWidget *parent = 0);    ~base();    child* p_child; // 定义子窗口指针};
  4. 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(){}
  5. 执行结果

    • 这里写图片描述
  6. 总结

    • 子界面要向父界面覆盖需要留下QWidget* parent 参数已保留子窗口创建位置。
    • 子窗口最好写入一个QWidget内方便后边槽连接。
    • 子窗体自身show与不show其实是父窗口控制。
原创粉丝点击