Qt 错误:'Ui::MainWindow* MainWindow::ui' is private within this context 解决方法/n/n在 Qt 开发中,我们可能会遇到以下错误:/n/n/nd://QTProjects//JBMN//mythread.cpp:42: error: 'Ui::MainWindow* MainWindow::ui' is private within this context/n../JBMN/mythread.cpp: In member function 'virtual void RunScript::run()':/n../JBMN/mythread.cpp:28:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<JB_TYPE>::size_type' {aka 'long long unsigned int'} [-Wsign-compare]/n 28 | for(int j=0;j<jbList.size();j++){/n | ~^~~~~~~~~~~~~~/n../JBMN/mythread.cpp:42:34: error: 'Ui::MainWindow* MainWindow::ui' is private within this context/n 42 | int a=pThis->ui->led_time->text().toInt();/n | ^~/n/n/n这个错误通常出现在我们尝试在全局变量中访问 MainWindow 类的私有成员 ui 时。这是因为 uiMainWindow 类的私有成员,无法在外部直接访问。/n/n### 错误原因/n/n错误的主要原因在于错误地使用了全局变量 pThis 来访问私有成员 ui。这种方法违反了面向对象编程的封装性原则,会导致代码结构混乱且难以维护。/n/n### 解决方法/n/n1. 使用 getter 函数/n/n在 MainWindow 类中添加一个公有的 getter 函数,用于获取 ui 指针:/n/ncpp/n// mainwindow.h/npublic:/n Ui::MainWindow* getUi() const;/n/n// mainwindow.cpp/nUi::MainWindow* MainWindow::getUi() const/n{/n return ui;/n}/n/n/n然后在需要访问 ui 的地方使用 getUi() 函数来获取 ui 指针:/n/ncpp/n// third.cpp/nint someFunction()/n{/n pThis->getUi()->led_time->text().toInt(); /n // .../n}/n/n/n2. 包含 UI 头文件/n/n在使用 getUi() 函数时,会遇到以下错误:/n/n/n../JBMN/mythread.cpp:42:35: error: invalid use of incomplete type 'class Ui::MainWindow'/n 42 | pThis->getUi()->led_time->text().toInt();/n | ^~/n/n/n这个错误是因为 Ui::MainWindow 是一个前向声明,需要包含对应的头文件才能进行定义。修改方法如下:/n/ncpp/n// globalval.h/n#include 'mainwindow.h' // 包含头文件/n/nextern MainWindow *pThis;/n/n// mainwindow.h/n#ifndef MAINWINDOW_H/n#define MAINWINDOW_H/n/n#include <QMainWindow>/n/n#include 'ui_mainwindow.h' // 包含 UI 头文件/n/nnamespace Ui {/nclass MainWindow;/n}/n/nclass MainWindow : public QMainWindow/n{/n Q_OBJECT/n/npublic:/n explicit MainWindow(QWidget *parent = nullptr);/n ~MainWindow();/n Ui::MainWindow* getUi() const; // 添加getter函数/n/nprivate:/n Ui::MainWindow *ui;/n};/n/n#endif // MAINWINDOW_H/n/n// mainwindow.cpp/n#include 'mainwindow.h'/n#include 'globalval.h'/n/nMainWindow::MainWindow(QWidget *parent)/n : QMainWindow(parent)/n , ui(new Ui::MainWindow)/n{/n ui->setupUi(this);/n pThis = this;/n}/n/nUi::MainWindow* MainWindow::getUi() const/n{/n return ui;/n}/n/n// third.cpp/n#include 'mainwindow.h'/n#include 'globalval.h'/n/nint someFunction()/n{/n pThis->getUi()->led_time->text().toInt(); /n // .../n}/n/n/n3. 避免使用全局变量/n/n使用全局变量会导致代码耦合度过高,难以维护。建议使用其他方法来传递需要访问的成员,例如通过函数参数传递或使用信号与槽机制。/n/n### 总结/n/n通过使用 getter 函数和包含 UI 头文件,我们可以解决 'Ui::MainWindow* MainWindow::ui' is private within this context 的错误,并确保代码的封装性和可维护性。同时,建议尽量避免使用全局变量,以提高代码质量。/n/n希望以上解决方法对您有所帮助。/n

Qt 错误:'Ui::MainWindow* MainWindow::ui' is private within this context 解决方法

原文地址: https://www.cveoy.top/t/topic/nuLp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录