qt如何在其他类中使用主界面ui

1、UI默认是私有的,因此需要在外部调用,需要改为public

    Ui::Widget *ui;  // 1、将ui公有化
/*
private:     // 这行内容注释掉
    Ui::Widget *ui;*/

2、自定义窗口类

 static Widget *myWidget;  // 2、定义一个静态的ui 定义一个窗口类 ui在自定义窗口类myui下

3、自定义窗口类初始化,在构造函数中

Widget* Widget::myWidget = nullptr;  // 3、初始化自定义窗口类

4、把当前窗口赋值给自定窗口

myWidget = this;  // 4、给自定义窗口赋值

5、添加新的类test

Ui::Widget *ui = Widget::myWidget->ui;   // 5、将主类中的ui传过来

6、可以在test类中调用ui

// 6、对类中的内容初始化
void test::testInit()
{
    ui->lineEdit->setText("您好呀");
}

7、程序运行,需要在主类中调用

test t;
t.testInit();  // 7、test类初始化

8、全部代码

复制代码
// widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    static Widget *myWidget;  // 2、定义一个静态的ui 定义一个窗口类 ui在自定义窗口类myui下
    Ui::Widget *ui;  // 1、将ui公有化
/*
private:
    Ui::Widget *ui;*/
};
#endif // WIDGET_H

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "test.h"

Widget* Widget::myWidget = nullptr;  // 3、初始化自定义窗口类

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    myWidget = this;  // 4、给自定义窗口赋值
    test t;
    t.testInit();  // 7、test类初始化
}

Widget::~Widget()
{
    delete ui;
}


// test.h
#ifndef TEST_H
#define TEST_H

#include <QWidget>
#include "widget.h"
#include "ui_widget.h"

class test : public QWidget
{
    Q_OBJECT
public:
    explicit test(QWidget *parent = nullptr);
    Ui::Widget *ui = Widget::myWidget->ui;   // 5、将主类中的ui传过来
    void testInit();  // test类初始化函数
signals:

};

#endif // TEST_H


//test.cpp
#include "test.h"

test::test(QWidget *parent) : QWidget(parent)
{

}
// 6、对类中的内容初始化
void test::testInit()
{
    ui->lineEdit->setText("您好呀");
}
View Code
复制代码

 

posted @ 2020-09-02 15:58  笑不出花的旦旦  阅读(6113)  评论(0)    收藏  举报
编辑推荐:
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· Java线程池详解:高效并发编程的核心利器
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
阅读排行:
· 基于.net6的一款开源的低代码、权限、工作流、动态接口平台
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· Claude Code 初体验 - Windows
· 基于 C# 编写的轻量级工控网关和 SCADA 组态软件
· 纯C#软实现openGL(V0.1),黑盒变白盒
点击右上角即可分享
微信分享提示