【问题标题】:Qt setting up new windowQt设置新窗口
【发布时间】:2012-07-29 11:27:31
【问题描述】:

我已经尝试并尝试为我的应用程序创建一个新窗口。我让它工作并打开窗口,但是当我尝试添加我的表单 .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 不起作用。救命!!

【问题讨论】:

    标签: c++ forms qt user-interface


    【解决方案1】:

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

    【讨论】:

    • 它没有用我更改了包含并运行了 qmake,清理了项目并删除了 make 文件并重新启动了 Qt,但它仍然没有工作。
    • @user1438702 您是如何添加表单的?通过QtCreator菜单选项,还是手动?
    • 通过文件->新建文件或项目->qt->新建设计师表单
    • @user1438702 尝试删除 ui_... 文件,然后重新运行 qmake 等。FWIW 我遇到了这个确切的问题,并且足够的删除和移动 #includes 最终解决了它。请注意,您不需要重新启动 QtCreator,节省自己的时间。
    • 我做到了。我让表单设计器自动添加 .ui .cpp 和 .h 。一切就绪
    【解决方案2】:

    如果我理解正确,您需要按如下方式定义 new_round,但您不想包含头文件本身。此外,您想声明一个 Ui_NewRound 类型的指针,而不是 New_Round 类型本身的指针——我假设您使用 Designer 创建此代码,在这种情况下您最终会得到一个名为 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;
    }
    

    希望能帮助您入门!

    干杯,

    本。

    【讨论】:

    • 它给了我错误:ISO C++ 禁止声明没有类型的“Ui_NewRound”
    • 对,在这种情况下,您实际上需要创建一个 Ui_NewRound 类——这通常使用 Qt 设计器软件来完成。或者您可以手动手动创建它!
    • 啊,我做到了,我让 qt 表单设计器一次性添加了 .ui .cpp 和 .h。它自动做到了。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多