无法为我的项目添加另一个窗口

时间:2013-05-22 13:12:25

标签: c++ qt

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

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

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

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

但是当我编译时,它会在settingsWindow.cpp中的ui(new Ui::settingsWindow) 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

我该怎么办?

3 个答案:

答案 0 :(得分:2)

你在窗口创建中的某个地方搞砸了。如果您只想使用QtCreator,您应该:

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

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

ps:你不必担心班级ui::settingsWindow。只需确保您提供的指令 在您提供的示例代码中缺失

#include "ui_settingsWindow.h"

答案 1 :(得分:1)

假设您正确创建了settingswindow类(通过右键单击项目浏览器中的表单列表 - > gt;添加新的 - &gt; qt - &gt; qt设计器表单类,您应该在其中实现您的settingswindow类),您需要在mainWindow.h中包含settingsWindow.h,在settingsWindow类的mainwindow.h指针中创建(如果你想要它是全局的),在mainwindow.cpp中你只是创建它,就像你创建QWidget一样,但没有父

mainwindow.h:

#include "settingsWindow.h"

... mainwindow class...

settingsWindow *sw;

.....

mainwindow.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)

答案 2 :(得分:0)

很可能你的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);
}