无法向我的项目添加另一个窗口[重复]
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解决方案?