为什么 QT 告诉我我的 QDialog inherited class 不是 QWidget?
Why is QT telling me my QDialog inherited class is not a QWidget?
我正在尝试 create/add 我的应用程序的对话框 - 解释为什么对话框的名称 - 它允许 configuration/settings 被维护,例如 themes/styles,并且所以它被称为 SettingsDialog。无论出于何种原因,我在头文件中没有收到任何错误,但我在 cpp 文件中收到错误 - 起初它对我大喊大叫,构造函数看起来像一个构造函数但不是一个或类似的东西 - 我似乎修复了只需将主体应用于所有其他方法(即使我以前从未遇到过该错误)。现在,当我尝试创建 QSplitter 时,它告诉我 'this' 不是 QWidget,当它引用此 class 时,QDialog 根据 QT 文档继承自 QWidget。我觉得我可能遗漏了某个地方的错字。请我希望有人能看到堵塞并帮助我解决它。
在有人抱怨它没有他们想要的那么简单之前 - 我只包括最低限度的方法和项目 - 我创建的每个小部件都有一个 initPanel/Window/Dialog 方法和一个调用的 initControls 方法从其他配置之后的其他 init 方法。如您所见,在构造函数中,我调用了 initDialog。我把我的 classes 放在一个 namespace 中 - 当然它可能有很多白色 space 但是如果通过删除 namespace 部分它修复它 - 那不会'不要为我修复它 - namespaces 是必不可少的,所以我需要一个将它们保留在代码中的解决方案,这就是我没有删除它们的原因。否则,我无法剥离任何其他东西。当我让这部分停止在构建中出错时,最终会有更多的人进入那里,所以即使现在没有调用 init 方法,也不会有任何帮助。
SettingsDialog.h:
#pragma once
#include <QDialog>
#include <QSplitter>
namespace net
{
namespace draconia
{
namespace mediadb
{
namespace ui
{
class SettingsDialog : public QDialog
{
Q_OBJECT
QSplitter *mPnlSplitter;
protected:
QSplitter *getSplitter() const;
void initControls();
void initDialog();
public:
SettingsDialog(QWidget *parent = nullptr);
};
}
}
}
}
SettingsDialog.cpp:
#include "SettingsDialog.h"
using namespace net::draconia::mediadb::ui;
QSplitter *SettingsDialog::getSplitter() const
{
if(mPnlSplitter == nullptr)
{
mPnlSplitter = new QSplitter(Qt::Orientation::Horizontal, this); // Error - no matching constructors evidently
}
}
void SettingsDialog::initControls()
{ }
void SettingsDialog::initDialog()
{ }
SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
, mPnlSplitter(nullptr)
{
initDialog();
}
- 您尝试更改
const
getSplitter()
方法中的 mPnlSplitter
成员。
QSplitter
的构造函数接受 QWidget *
,而不是 const QWidget *
另请注意,QSplitter *SettingsDialog::getSplitter() const
应该return一个值,但方法中没有return。
我正在尝试 create/add 我的应用程序的对话框 - 解释为什么对话框的名称 - 它允许 configuration/settings 被维护,例如 themes/styles,并且所以它被称为 SettingsDialog。无论出于何种原因,我在头文件中没有收到任何错误,但我在 cpp 文件中收到错误 - 起初它对我大喊大叫,构造函数看起来像一个构造函数但不是一个或类似的东西 - 我似乎修复了只需将主体应用于所有其他方法(即使我以前从未遇到过该错误)。现在,当我尝试创建 QSplitter 时,它告诉我 'this' 不是 QWidget,当它引用此 class 时,QDialog 根据 QT 文档继承自 QWidget。我觉得我可能遗漏了某个地方的错字。请我希望有人能看到堵塞并帮助我解决它。
在有人抱怨它没有他们想要的那么简单之前 - 我只包括最低限度的方法和项目 - 我创建的每个小部件都有一个 initPanel/Window/Dialog 方法和一个调用的 initControls 方法从其他配置之后的其他 init 方法。如您所见,在构造函数中,我调用了 initDialog。我把我的 classes 放在一个 namespace 中 - 当然它可能有很多白色 space 但是如果通过删除 namespace 部分它修复它 - 那不会'不要为我修复它 - namespaces 是必不可少的,所以我需要一个将它们保留在代码中的解决方案,这就是我没有删除它们的原因。否则,我无法剥离任何其他东西。当我让这部分停止在构建中出错时,最终会有更多的人进入那里,所以即使现在没有调用 init 方法,也不会有任何帮助。
SettingsDialog.h:
#pragma once
#include <QDialog>
#include <QSplitter>
namespace net
{
namespace draconia
{
namespace mediadb
{
namespace ui
{
class SettingsDialog : public QDialog
{
Q_OBJECT
QSplitter *mPnlSplitter;
protected:
QSplitter *getSplitter() const;
void initControls();
void initDialog();
public:
SettingsDialog(QWidget *parent = nullptr);
};
}
}
}
}
SettingsDialog.cpp:
#include "SettingsDialog.h"
using namespace net::draconia::mediadb::ui;
QSplitter *SettingsDialog::getSplitter() const
{
if(mPnlSplitter == nullptr)
{
mPnlSplitter = new QSplitter(Qt::Orientation::Horizontal, this); // Error - no matching constructors evidently
}
}
void SettingsDialog::initControls()
{ }
void SettingsDialog::initDialog()
{ }
SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
, mPnlSplitter(nullptr)
{
initDialog();
}
- 您尝试更改
const
getSplitter()
方法中的mPnlSplitter
成员。 QSplitter
的构造函数接受QWidget *
,而不是const QWidget *
另请注意,QSplitter *SettingsDialog::getSplitter() const
应该return一个值,但方法中没有return。