すべてのウィジェットを含む MainWindow クラスがあり、メイン ウィンドウ (MainWindow クラス) に配置されたすべてのウィジェットにアクセスする MyClass クラスがあります。これどうやってするの?私はこのようにしようとしています(以下のコード)-しかし、それは私にたくさんのエラーを与えます:
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
}
更新: 以下の beige のコメントに便利なコードがあります。それは正常に動作します。しかし、私の場合はそうではありません:( 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」を宣言しています。