【问题标题】: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 是的,我做到了。没有改善。

标签: c++ qt


【解决方案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 一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多