为什么 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();
}
  1. 您尝试更改 const getSplitter() 方法中的 mPnlSplitter 成员。
  2. QSplitter 的构造函数接受 QWidget *,而不是 const QWidget *

另请注意,QSplitter *SettingsDialog::getSplitter() const应该return一个值,但方法中没有return。