【发布时间】:2012-10-09 14:03:54
【问题描述】:
我有一个包含所有小部件的 MainWindow 类,我有一个 MyClass 类,我想在其中访问放置在主窗口中的所有小部件(MainWindow 类)。我怎样才能做到这一点?我尝试这样做(下面的代码) - 但它给了我一堆错误:
MyClass.h:4: error: 'Ui' has not been declared
MyClass.h:4: error: expected `)' before '*' token
MyClass.h:6: error: 'Ui' has not been declared
MyClass.h:6: error: ISO C++ forbids declaration of 'MainWindow' with no type
MyClass.h:6: error: expected ';' before '*' token
这个由 QtCreator 创建的 MainWindow - 它是一个由 Qt Creator 创建的标准 GUI 窗口。
// -=-=-=-=-=-=-=-=-=-=[ MyClass.h ]=-=-=-=-=-=-=-=-=-=-=-=-=-
#include "MainWindow.h"
class MyClass {
public:
MyClass( Ui::MainWindow *ui );
private:
Ui::MainWindow *ui;
};
// -=-=-=-=-=-=-=-=-=-=[ MyClass.cpp ]=-=-=-=-=-=-=-=-=-=-=-=-=-
#include "MyClass.h"
MyClass::MyClass( Ui::MainWindow *ui ){
this->myUI = ui; // myUI is desclared as: Ui::MainWindow *myUI
}
// -=-=-=-=-=-=-=-=-=-=[ MainWindow.h ]=-=-=-=-=-=-=-=-=-=-=-=-=-
....
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
private:
Ui::MainWindow *ui; // this has done by Qt Creator
public:
MyClass *myClass;
}
// -=-=-=-=-=-=-=-=-=-=[ MainWindow.cpp ]=-=-=-=-=-=-=-=-=-=-=-=-=-
#include "MainWindow.h"
MainWindow::MainWindow( QWidget *parent ): QMainWindow( parent ), ui( new Ui::MainWindow ) {
ui->setupUi( this );
myClass = new MyClass( ui ); // my attempt
}
更新: 米色下面的评论中有有用的代码。它工作正常。但不是在我的情况下:(当我尝试从任何类(不是从 MainWindow.h)声明 MyClass 时:
// -=-=-=-=-=-=-=-=-=-=[ MyGLWidget.h ]=-=-=-=-=-=-=-=-=-=- =-=-=-
#include "MyClass.h"
class MyGLWidget : public QGLWidget {
Q_OBJECT
public:
MyClass *myClass;
}
它不起作用:
myclass.h:9: error: 'Ui' has not been declared
myclass.h:9: error: expected `)' before '*' token
myclass.h:12: error: 'Ui' has not been declared
myclass.h:12: error: ISO C++ forbids declaration of 'MainWindow' with no type
myclass.h:12: error: expected ';' before '*' token
但是为什么呢?我在 MyClass.h 中声明了“ui_mainwindow.h”。
【问题讨论】:
-
那是您拥有的确切代码吗?您是否遇到运行时错误或编译器错误?
-
就行了:“public: MyClass(Ui::MainWindow ui);”在 MyClass.h 中,我给出了一个错误:“错误:预期的 `)' 在 '' 标记之前”。编译器也在这一行声明:“私有:Ui::MainWindow *ui;”:“错误:ISO C++ 禁止声明没有类型的 'MainWindow'”。
-
也许有人可以用 MyClass.h 和 MyClass.cpp 发布一些可以访问主窗口 ui 的简单代码?
-
您必须首先包含“ui_...”,或者前向声明类 Ui::MainWindow。
-
@JavaRunner,“ui_..”文件由用户界面编译器生成(参见qt-project.org/doc/qt-4.8/uic.html)。我已经向您发布了一些可以使用的代码。