在QT GUI应用程序中切换窗口

我试图在我的3个窗口之间build立一个链接,所以我把它放在我的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对其他两个窗口( file.h + file.cpp )执行相同的步骤时,

我得到的错误:QT错误:'flightdata'没有命名一个types的QT错误:'video'不命名一个types

但是,当我只包括第一个窗口而不是其他两个时,我不明白这个问题。

也许这是由recursion引起的。

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

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

标题:

 // no include for 'video.h' class video; class MainWindow : public QMainWindow { //... video *myVideoWindow; }; 

资源:

 #include "video.h" //... 

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

  1. 预处理器/ MACRO

    如果您使用QtCreator / Designer创建了其他窗口,那么#ifndef宏应该是唯一的。 意思是,video.h应该是这样的:

     #ifndef VIDEOWINDOW_H #define VIDEOWINDOW_H 

    而不是默认的

     #ifndef MAINWINDOW_H #define MAINWINDOW_H 

    这些#ifndef MACROS旨在帮助仅包含一次头文件的内容。

  2. 缺少包含路径

    另外,如果你使用QtCreator,编辑器应该显示#include“video.h”和#include“flightdata.h”作为链接(control +左键单击)。 如果语法加下划线为红色,则意味着项目无法找到这些文件。

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

     # eg INCLUDEPATH += ../myflightdata ../myvideofiles