0

我已经尝试并尝试为我的应用程序创建一个新窗口。我让它工作并打开窗口,但是当我尝试添加我的表单 .ui 东西时,它就停止了工作。对不起,我不知道我做错了什么。只是有人请看一下代码和帮助。

    #include "new_round.h"
    #include "ui_NewRound.h"

    New_Round::New_Round(QWidget *parent) :
        QMainWindow(parent),
        uinr(new Uinr::New_Round)
    {   
uinr->setupUi(this);
    }
    New_Round::~New_Round()
    {
        delete uinr;
    }

那是 new_round 类的 cpp 文件,现在这里是标题。

    #ifndef NEW_ROUND_H
    #define NEW_ROUND_H

    #include "new_round.h"
    #include <QMainWindow>

    namespace Uinr{
     class New_Round;
    }

    class New_Round : public QMainWindow
    {
        Q_OBJECT
    public:
        explicit New_Round(QWidget *parent = 0);
        ~New_Round();

    private:
        Uinr::New_Round *uinr;
    };



    #endif // NEW_ROUND_H

这是我得到的 4 个错误

invalid use of incomplete type 'struct Uinr::New_Round'
forward declaration of 'struct Uinr::New_Round'
invalid use of incomplete type 'struct Uinr::New_Round'
forward declaration of 'struct Uinr::New_Round'

我找不到任何关于这个主题的教程,所以我只是在我的 mainwindow.h 和 mainwindow.cpp 之间来回查看,所以不确定我做错了什么。我再次得到了要显示的窗口,但表单 NewRound.ui 不起作用。帮助!!

4

2 回答 2

0

您的头文件#include本身。取出它#include并替换它,#include ui_Newound.h它应该可以工作。您可能需要先运行 qmake 并清理项目,并且可能需要手动删除 Makefile。

于 2012-07-31T16:16:40.383 回答
0

如果我理解正确,您需要按如下方式定义 new_round 但是,您不想包含头文件本身。此外,您想声明一个 Ui_NewRound 类型的指针,而不是 New_Round 本身类型的指针——我假设您使用设计器创建此代码,在这种情况下您最终会得到一个名为 Ui_NewRound 的类。另外,不要一开始就关心命名空间,它只会让事情变得过于复杂。所以这里我们使用头文件:

#ifndef NEW_ROUND_H
#define NEW_ROUND_H


#include <QMainWindow>
#include "Ui_NewRound.h"

// no including of new_round here -- this needs to be included in .cpp file instead
class New_Round : public QMainWindow
{
    Q_OBJECT
public:
    New_Round(QWidget *parent = 0);
    ~New_Round();

private:
   Ui_NewRound *nr;


};

#endif

它将被保存为 new_round.h。

在 .cpp 代码中,我会有

#include "new_round.h"
#include "ui_NewRound.h"


New_Round::New_Round(QWidget *parent) :
    QMainWindow(parent)
{   
    nr = new ui_NewRound;
    nr->setupUi(this);
}
New_Round::~New_Round()
{
    delete nr;
}

希望这能让你开始!

干杯,

本。

于 2012-07-31T16:34:58.863 回答