【问题标题】:Why is QT telling me my QDialog inherited class is not a QWidget?为什么 QT 告诉我我的 QDialog 继承类不是 QWidget?
【发布时间】:2020-07-01 03:02:43
【问题描述】:

我正在尝试在我的应用程序中创建/添加一个对话框 - 解释对话框名称的原因 - 这是为了允许维护配置/设置,例如主题/样式,因此它被称为 SettingsDialog。无论出于何种原因,我在头文件中没有错误,但在 cpp 文件中出现错误 - 起初它对我大喊大叫构造函数看起来像构造函数但不是一个或类似的东西 - 我似乎修复了只需将主体应用于所有其他方法(即使我以前从未遇到过该错误)。现在,当我尝试创建一个 QSplitter 时,它告诉我“this”不是一个 QWidget,当它引用这个类时,根据 QT 文档,它是一个 QDialog,它是从 QWidget 继承的。我觉得我可能错过了某个地方的错字。请我希望有人能看到阻塞并帮助我解决它。

在有人抱怨它不像他们想要的那么简单之前 - 我只包括了最基本的方法和项目 - 我创建的每个小部件都有一个 initPanel/Window/Dialog 方法和一个从其他配置后的其他init方法。如您所见,在构造函数中,我调用了 initDialog。我将我的类放在一个命名空间中 - 当然它可能是很多空白,但是如果通过删除命名空间部分它可以修复它 - 这对我来说并没有修复它 - 命名空间是必不可少的,所以我需要一个解决方案来将它们保留在这就是为什么我没有删除它们的代码。否则,我无法剥离其他任何东西。当我让这部分停止构建错误时,最终会有更多的东西进入那里,所以即使现在没有调用它们,删掉 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();
}

【问题讨论】:

    标签: c++ qt qwidget qdialog


    【解决方案1】:
    1. 您尝试更改const getSplitter() 方法中的mPnlSplitter 成员。
    2. QSplitter 的构造函数接受 QWidget *,而不是 const QWidget *

    还要注意QSplitter *SettingsDialog::getSplitter() const应该返回一个值,但是方法中没有返回。

    【讨论】:

    • 你是天赐之物!我在头文件和 cpp 文件的末尾都去掉了“const”并修复了它——我倾向于将 const 放在 getter 的末尾,而不考虑我正在使用惰性创建这一事实。我为此绞尽脑汁。太感谢了!我对答案投了赞成票,但我还需要做些什么来将此答案标记为好答案吗?
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2010-10-20
    • 2016-07-30
    • 2019-01-25
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多