0

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

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

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

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

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

我应该怎么办?

4

3 回答 3

2

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

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

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

ps:上课不用担心ui::settingsWindow。只需确保您有您提供的示例代码中缺少的指令

#include "ui_settingsWindow.h"
于 2013-05-22T13:30:32.237 回答
1

假设您正确创建了 settingswindow 类(通过右键单击项目资源管理器中的表单列表 -> 添加新的 -> qt -> qt 设计器表单类,您应该在其中实现您的 settingswindow 类),您需要将 settingsWindow.h 包含在mainWindow.h,在 settingsWindow 类的 mainwindow.h 指针中创建(如果你希望它是全局的),在 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)
于 2013-05-22T13:23:04.917 回答
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);
}
于 2013-05-22T13:23:31.020 回答