Próbuję utworzyć / dodać okno dialogowe do mojej aplikacji - aby wyjaśnić, dlaczego nazwa okna dialogowego - to zezwolić na utrzymanie konfiguracji / ustawień, takich jak motywy / style i takie, jak nazywa się UstawieniaDialog. Z jakiegokolwiek powodu nie mam żadnych błędów w pliku nagłówka, ale dostaję błędy w pliku CPP - na początku krzyknął na mnie, że konstruktor wyglądał jak konstruktor, ale nie był taki ani coś takiego - wydawało mi się naprawić To tylko poprzez stosowanie organów do każdej innej metody (nawet jeśli nigdy wcześniej nie mam tego błędu). Teraz, kiedy próbuję stworzyć QSPLITter, mówi mi "To" nie jest qwidget, gdy odnosi się do tej klasy, qdialog, który zgodnie z dokumentacją QT jest dziedziczony z QWidget. Czuję, że jest gdzieś jest literówka. Mam nadzieję, że ktoś może zobaczyć blokadę i pomoże mi to rozwiązać.

Zanim ktokolwiek narzeka na to, że nie jest tak proste, jak się podobały - dołączam tylko nagi minimalne metody i elementy - każdy widget, który tworzę, ma metodę initanel / okno / dialogową i metodę initcontrols, która jest wywoływana z innej metody inicjującej po innych konfiguracjach. Jak widać, w konstruktorze, nazywam initdialog. Umieściłem swoje zajęcia w przestrzeni nazw - na pewno może być dużo białej przestrzeni, ale jeśli usuwając sekcję przestrzeni nazw, rozwiązuje ją - to nie naprawia go dla mnie - przestrzeni nazw są niezbędne, więc potrzebuję rozwiązania, które je utrzymuje Kod, dlaczego ich nie usunąłem. W przeciwnym razie nie mogę usunąć niczego innego. More zakończy się tam w końcu, gdy otrzymam tę część, aby powstrzymać błąd w budowaniu, więc wycinanie metod Inicjuszowych, nawet jeśli nie są wywoływane, teraz nie pomogą niczego.

UstawieniaDialog.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);
                };
            }
        }
    }
}

UstawieniaDialog.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();
}
0
Seth D. Fulmer 20 marzec 2020, 02:04

1 odpowiedź

Najlepsza odpowiedź
  1. Próbujesz zmienić członek mPnlSplitter w metodzie const getSplitter().
  2. QSplitter Konstruktor akceptuje QWidget *, a nie const QWidget *

Należy również pamiętać, że QSplitter *SettingsDialog::getSplitter() const powinien zwrócić wartość, ale w metodzie nie ma powrotu.

2
Vladimir Bershov 19 marzec 2020, 23:23