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
原文地址:https://www.cnblogs.com/lbx-cnblogs/p/13602203.html