我正在尝试构建一个可以出现多个窗口的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
我该怎么办?
答案 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);
}