2013-06-18 133 views
1

我试图让我的3个窗口之间的联系,所以我把这个在我的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错误: 'flightdata' 没有指定 类型QT错误: '视频'不会命名一个类型

但是,当我只包括第一个窗口而不是其他2个时,我不会遇到这个问题。

也许它是由递归引起的。

+0

是否包含您需要的所有文件? – prajmus

+0

是的问题是,我有3个文件,我必须包括 和每次我必须包括在每个类 但是当我这样做只是为一个类,它的工作10/10 但当我使包括在所有的类它转向这个错误 Bcs简单地如果我包括Xh在Yh,并在一段时间内我需要在Xh inch Yh,QT将有问题生成文件 – user2216648

+0

正向声明你的类 – prajmus

回答

1

不要在头文件中包含其他类。仅将它们包括在源文件中。

如果由于某种原因需要在其他类的头文件中使用另一个类,请使用forward声明而不是include。

部首:

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

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

来源:

#include "video.h" 
//... 
+0

它s工作感谢(y) – user2216648

0

据我所知,有潜在的两件事情可能是错误的:

  1. 预处理器/ MACRO

    如果您创建其他窗口与QtCreator/Designer,#ifndef宏应该是唯一的。这意味着,video.h应该是这样:

    ​​

    ,而不是默认

    #ifndef MAINWINDOW_H 
    #define MAINWINDOW_H 
    

    这些的#ifndef宏旨在帮助包括一次且仅一次头文件的内容。

  2. 缺少include路径

    另外,如果你使用QtCreator,编辑应显示的#include “video.h” 和#包括 “flightdata.h” 为纽带(控制+左键点击)。如果语法带有红色下划线,则意味着该项目无法找到这些文件。

    然后,您需要检查以确保文件在您的项目文件夹中,或者添加具有添加到pro文件的qmake变量INCLUDEPATH中的文件的路径。

    # e.g. 
    INCLUDEPATH += ../myflightdata ../myvideofiles