底线是我有2个表格,第一个主窗口第2表格1。我在主窗口上有一个按钮,显示表格2。现在我在form1上有一个按钮,应该把我带到主窗口,但它不起作用。问题是,当我在form1.h中说#include时,它给了我一个错误,即mainwindow没有名称类型。请帮忙,如果可能的话,工作示例会很棒。实际错误是MainWindow没有名称类型
mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <form1.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui; // i put this line of code in public section when i was trying ui->show(); in form1.cpp file
Form1 obj ; // to show next form
};
#endif // MAINWINDOW_H
mainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
obj.show();
this->hide();
}
Form1.h
#ifndef FORM1_H
#define FORM1_H
#include <QWidget>
#include<mainwindow.h>
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = 0);
~Form1();
private slots:
void on_pushButton_clicked();
private:
Ui::Form1 *ui;
MainWindow mw ; // here i am making object of main window
};
#endif // FORM1_H
form1.cpp
#include "form1.h"
#include "ui_form1.h"
#include<mainwindow.h> // i know when i include this there this issue occurs , but i want to go my previous form to show and for that i have to make its object ! thats how it works when i am going to my next form i.e form1 now i want to go back
Form1::Form1(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form1)
{
ui->setupUi(this);
}
Form1::~Form1()
{
delete ui;
}
void Form1::on_pushButton_clicked() // show mainWindow
{
mw->show();
this->hide();
//MainWindow::ui->show(); // i even tried this
}
我也试过,如果我可以在没有在form1.h中包含mainwindow.h的情况下通过puttin Ui :: MainWindow * ui;在公共部分,所以form1.cpp文件,我可以通过输入MainWindow :: ui-&gt; show();这次ERROR说对象丢失参考&#39; MainWindow :: ui&#39;
答案 0 :(得分:1)
您在班级MainWindow
和Form1
之间存在循环依赖关系。因此,您form1.h
中的mainwindow.h
和mainwindow.h
中的form1.h
包括MainWindow mw ; // here i am making object of main window
。当编译器到达
MainWindow
这是他第一次遇到符号mw
并触发该错误。
我仍然不明白为什么MainWindow* mw ;
是Form1的成员,但您可以使用指针来破坏依赖关系。基本上你现在有
#include<mainwindow.h>
而不是Form1.h
中的class MainWindow;
,您只需要转发声明
{{1}}