无法向我的项目添加另一个窗口[重复]

Posted

技术标签:

【中文标题】无法向我的项目添加另一个窗口[重复]【英文标题】:Can not add another window to my project [duplicate] 【发布时间】:2013-05-22 13:12:24 【问题描述】:

我正在尝试构建一个可以出现多个窗口的 Qt 应用程序。

示例:有一个主窗口,上面有一个设置菜单。单击设置菜单时,我希望显示另一个窗口,标题为“设置”,并显示程序的不同设置属性。

我希望在 Qt creator 中设计此设置窗口,而不是仅通过编写代码来创建。我设计了设置窗口并将settings.ui文件添加到我的项目中。

我还按照 mainWindow.h 和 mainWindow.cpp 的结构(创建 gui 项目时自动生成)创建了 settingsWindow.cpp 和 settingsWindow.h。

但是当我编译时,它在 settingsWindow.cpp 中的 settingsWindow 构造函数的ui(new Ui::settingsWindow) 上显示错误

settingsWindow::settingsWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::settingsWindow)

    ui->setupUi(this);

错误提示:'Ui::settingsWindow' : no appropriate default constructor available

这里是settingsWinow.h的内容:

#ifndef SETTINGSWINDOW_H
#define SETTINGSWINDOW_H

#include <QMainWindow>

namespace Ui

    class settingsWindow;


class settingsWindow : public QMainWindow

    Q_OBJECT
public:
    explicit settingsWindow(QWidget *parent = 0);
    ~settingsWindow();

private:
    Ui::settingsWindow *ui;
;

#endif // SETTINGSWINDOW_H

我该怎么办?

【问题讨论】:

你能显示settingsWindow的类声明吗? 你尝试过重建你的项目吗? 设置窗口的objectName是什么? @JBL 我已经在问题的编辑版本中添加了代码 @thuga 是的,我做到了。没有改善。 【参考方案1】:

您在创建窗口时搞砸了。如果你只想使用 QtCreator,你应该:

File -> New File or Project ->Qt -> Qt Designer Form Class 

然后您将拥有一个可以编辑的表单。该表单将生成类ui::settingsWindow。另一方面,您将有一个 不同settingsWindow,其代码与您在上面显示的代码相同。

ps:你不必担心ui::settingsWindow这个类。只需确保您有您提供的示例代码中缺少的指令

#include "ui_settingsWindow.h"

【讨论】:

#include "ui_settingsWindow.h" in settingWindow.cpp 如果我可以添加 确实是首选。【参考方案2】:

假设您正确创建了 settingswindow 类(通过右键单击项目资源管理器中的表单列表 -> 添加新的 -> qt -> qt 设计器表单类,您应该在其中实现您的 settingswindow 类),您需要包括 settingsWindow .h 在 mainWindow.h 中,在 mainwindow.h 中创建 settingsWindow 类的指针(如果您希望它是全局的),在 mainwindow.cpp 中创建它,就像创建 QWidget 一样,但没有父级。

主窗口.h:

#include "settingsWindow.h"

... mainwindow class...

settingsWindow *sw;

.....

主窗口.cpp:

... somewhere in constructor:
sw= new settingsWindow();
sw->show(); //(don't forget to delete sw in destructor, if you won't set any widget as it's parent)

【讨论】:

【参考方案3】:

您的 QMainWindow 和 ui 设置之间很可能存在冲突。尝试更改为 QWidget 并继承 Ui 和 QWidget:

#ifndef SETTINGSWINDOW_H
#define SETTINGSWINDOW_H

#include <QWidget>
#include <QMainWindow>


namespace Ui

    class settingsWindow;


class settingsWindow : public QWidget, Ui::settingsWindow

    Q_OBJECT
public:
    explicit settingsWindow(QWidget *parent = 0);
    ~settingsWindow();
    QMainWindow* m_parent;

private:
    Ui::settingsWindow *ui;
;

和:

settingsWindow::settingsWindow(QWidget *parent) :
    m_parent(parent)

    ui->setupUi(this);

【讨论】:

你在不同的命名空间中混合了同名的类。就像 OP 一样。

以上是关于无法向我的项目添加另一个窗口[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何向我的团队项目添加新解决方案?

如何防止 Visual Studio 2010 在 C++ 中向我的项目添加大型 SQL 文件?

当我将WPF UserControl用于其内置项目以外的项目时,我的WPF UserControl无法找到资源

如何将我的UserControl从另一个项目(Dll)添加到我的WPF解决方案?

如何向我的项目添加(导入)java websocket 库?

无法解析项目的依赖关系。找不到工件。