Qt中其他类调用窗口中的ui控件
Qt中其他类调用窗口中的ui控件操作步骤一、其他类必须继承QWidegt及其派生类二、将主窗口UI公有化三、定义一个静态的Widget指针四、将mywidget 指针中的ui指针传给Test中我们定义的ui指针代码个人建议操作步骤假设我们有一个类Test需要调用主窗口中的ui控件,但是没有ui指针,如何将ui指针传过去呢?一、其他类必须继承QWidegt及其派生类一个类如果想要使用ui控件,必须继
·
Qt中其他类调用窗口中的ui控件
操作步骤
假设我们有一个类Test需要调用主窗口中的ui控件,但是没有ui指针,如何将ui指针传过去呢?
一、其他类必须继承QWidegt及其派生类
一个类如果想要使用ui控件,必须继承QWidegt及其派生类,否则无法调用ui指针
class Test : public QWidget
{
Q_OBJECT
public:
explicit Test(QWidget *parent = nullptr);
signals:
public slots:
};
#endif // TEST_H
二、将主窗口UI公有化
将widget.h 中的私有的ui指针公有化
public:
Widget(QWidget *parent = nullptr);
~Widget();
Ui::Widget *ui;
private:
//Ui::Widget *ui;
三、定义一个静态的Widget指针
我们需要定义一个公有的静态Widget指针从widget中将ui传入到Test类中,否则即使Test类中载入#include "widget.h"和#include "ui_widget.h"也无法调用ui指针
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
static Widget *mywidget; //此处定义了一个mywidget指针
Ui::Widget *ui;
private:
//Ui::Widget *ui;
};
然后在.cpp文件中将指针初始化
Widget* Widget::mywidget = nullptr;
将我们主窗口的this传给mywidget
mywidget = this;
四、将mywidget 指针中的ui指针传给Test中我们定义的ui指针
class Test : public QWidget
{
Q_OBJECT
public:
explicit Test(QWidget *parent = nullptr);
Ui::Widget *ui = Widget::mywidget->ui;
signals:
public slots:
};
这样就可以在Test中通过ui指针调用ui控件
代码
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
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;
Ui::Widget *ui;
private:
//Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "test.h"
Widget* Widget::mywidget = nullptr;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
mywidget = this;
Test t;
t.mybutton();
}
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;
void mybutton();
};
#endif // TEST_H
test.cpp
#include "test.h"
Test::Test(QWidget *parent) : QWidget(parent)
{
}
void Test::mybutton()
{
ui->pushButton->setText("操作成功");
}
个人建议
不建议将ui公有化,这样会使程序不安全,在写项目时会出现各种各样的错误,可以在其他类中发送信号,在窗口类中使用槽函数进行接受。
更多推荐
已为社区贡献1条内容
所有评论(0)