Qt中,在另一cpp文件操作ui界面的相关控件

前言

在QT中,为了文件重载和文件可读性,需要将某一特定功能集成于一个类,包括类方法和类属性。在串口通讯时,负责串口的类需要获取ui界面串口的参数进行串口设置;在使用时查了很多方法,但是很多都不适用,经过不断的探索和摸索,找出两种方法可以完成这一操作。

  1. 系统: Windows 10系统 x64位
  2. QT版本:6.1.2
  3. 说明:这里主界面头文件为ui_mainwindow.h,系统默认的文件为mainwindow.cppmainwindow.h,添加的文件类是test.htest.cpp,需要在test文件操作ui界面里的控件。
  4. 程序中使用的label指的主界面标签控件

方法一:

1)在test.h中必须包含ui_mainwindow.h,声明一个public类ui指针变量,为便于区分,引用的指针变量为*cui

#ifndef TEST_H
#define TEST_H
#include "ui_mainwindow.h" //-----------------1
class test
{
public:
	Ui::MainWindow *cui;  //-----------------2
    test();
    void te();
};
#endif // TEST_H

2) test.cpp文件中,直接引用cui指针,对窗口的控件进行操作。

#include "test.h"
test::test()
{
}
void test::te()
{
	 cui->label->setText("hello");
}

3)在mainwindow.h里包含test.h并实例化对象test

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "ui_mainwindow.h"
#include 
// 引用test.h
#include "test.h"
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
// 设置了一个按钮的槽函数
private slots:
    void on_pushButton_clicked();
private:
    Ui::MainWindow *ui;  // ---------------注意:使用的是指针
    // 实例化test对象
    test cest;		// --------------------------3
};
#endif // MAINWINDOW_H

4)对test对象的cui指针进行赋值

#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui->setupUi(this);  // -----------------注意,使用指针与普通变量的区别
    // 最重要的一步,将主界面的指针赋给 cui指针变量
    cest.cui= ui;
}

MainWindow::~MainWindow()
{
}
void MainWindow::on_pushButton_clicked()
{
	cest.te();
}

完成以上步骤,就可以在test.cpp文件中对主界面控件进行操作。

方法二:

如果并不是所有类方法都需要操作界面,只是某一个,两个方法需要,只需要将ui指针赋给 类方法即可。

1)与方法相同的,必须都在test.h中引用ui_mainwindow.h

#ifndef TEST_H
#define TEST_H
// 引用 ui_mainwindow.h
#include "ui_mainwindow.h"  //-----------------------1
class test
{
public:
    test();
    // 声明需要操作ui界面的方法
    void test_method(Ui::MainWindow cui); //---------2
};
#endif // TEST_H

2)在test.cpp中定义类方法

#include "test.h"
test::test()
{
}
void test::test_method(Ui::MainWindow cui)
{
    cui.label->setText("hello");
}

3)在mainwindow.h里实例化对象 test,与方法一中步骤3一样,将注意里的窗口指针改为,普通窗口变量
4) 将ui传给类方法

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this); 
}
MainWindow::~MainWindow()
{
}
// 在槽函数中使用
void MainWindow::on_pushButton_clicked()
{
        cest.test_method(ui); //-------------------3
}

注意:一定要清楚指针变量与普通变量的应用,方法一使用的窗口的指针变量进行赋值;方法二使用的是普通变量进行传值。如果两者混合用的话,一定要注意。
例如,ui窗口使用的普通变量,另一个文件使用的是指针变量cui,进行赋值时,要取ui的地址,既 cui=&ui;

结果显示

未点按钮:
Qt中,在另一cpp文件操作ui界面的相关控件_第1张图片
点击按钮后:
Qt中,在另一cpp文件操作ui界面的相关控件_第2张图片

你可能感兴趣的:(QT)