1

私は 3 つの windows 間にリンクを作成しようとしているので、これを my に入れますmainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "video.h"
#include "flightdata.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
   void openNewWindowVideo();
    void openNewWindowData();


private:
    Ui::MainWindow *ui;
  video *myVideoWindow;
  flightdata *myDataWindow;
};

#endif // MAINWINDOW_H

そして、これは私の実装では:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
   connect(ui->actionVideo,SIGNAL(triggered()),this,SLOT(openNewWindowVideo()));

  connect(ui->actionFlight_data,SIGNAL(triggered()),this,SLOT(openNewWindowData()));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::openNewWindowVideo()
{
  myVideoWindow = new video();
 myVideoWindow->show();
  this->close();

}

void MainWindow::openNewWindowData()
{
 myDataWindow = new flightdata();
 myDataWindow->show();
  this->close();

}

これは機能します。

しかし、O が他の 2 つのウィンドウ ( file.h+ file.cpp) に対して同じ手順を実行すると、

iI エラーが発生します: qt error: 'flightdata' does not name a type qt error: 'video' does not name a type

しかし、他の2つではなく最初のウィンドウだけを含めると、この問題は発生しません。

多分それは再帰によって引き起こされています。

4

2 に答える 2

1

ヘッダー ファイルに他のクラスを含めないでください。ソース ファイルのみに含めます。

何らかの理由で別のクラスのヘッダーで別のクラスを使用する必要がある場合は、インクルードの代わりに前方宣言を使用します。

ヘッダ:

// no include for 'video.h'
class video;

class MainWindow : public QMainWindow {
  //...
  video *myVideoWindow;
};

ソース:

#include "video.h"
//...
于 2013-06-18T16:27:44.647 に答える