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

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

  1. 新建一个 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
  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_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; // 定义子窗口指针
    };
    
  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其实是父窗口控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值