«QObject :: connect: попытка связать не сигнальное предупреждение Class :: signal» в QWizard :: addPage () - PullRequest
0 голосов
/ 05 мая 2018

При попытке добавить производный QWizardPage с пользовательским Q_PROPERTY в конструктор производного QWizard я получаю следующее предупреждение времени выполнения для моего минимального примера:

QObject :: connect: попытка связать несигнальный TreeView :: ndex_changed [sic]

В моем исходном проекте поле «индекс» все еще работает, как и ожидалось, поэтому я привел пример, который выдает только предупреждение. Как мне избавиться от этого предупреждения?

Я использую Qt 5.10.1 и gcc 5.3.0 (MinGW).


Минимальный пример

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Widgets)
project(QWizard)
add_executable(${PROJECT_NAME}
    main.cpp
    TreeView.cpp
    Wizard.cpp
    WizardPage.cpp
)
target_link_libraries(${PROJECT_NAME}
    Qt5::Widgets
)

main.cpp

#include "Wizard.h"
#include <QApplication>

int main(int argc, char *argv[]) {
  QApplication application{argc, argv};
  Wizard wizard{};
  wizard.show();
  return application.exec();
}

TreeView.h

#pragma once

#include <QTreeView>

class TreeView : public QTreeView {
    Q_OBJECT
    Q_PROPERTY(QModelIndex index READ index NOTIFY index_changed)

  public:
    explicit TreeView(QWidget* parent = nullptr);

    QModelIndex index() const;

  signals:
    void index_changed();
};

TreeView.cpp

#include "TreeView.h"

TreeView::TreeView(QWidget *parent) : QTreeView(parent) {
  connect(this, &QTreeView::clicked, [&]() { emit index_changed(); });
}

QModelIndex TreeView::index() const { return currentIndex(); }

Wizard.h

#pragma once

#include <QWizard>

class Wizard : public QWizard {
  public:
    explicit Wizard(QWidget* parent = nullptr);
};

Wizard.cpp

#include "Wizard.h"
#include "WizardPage.h"

Wizard::Wizard(QWidget *parent) : QWizard(parent) {
  auto *page = new WizardPage{this};
  addPage(page);
}

WizardPage.h

#pragma once

#include <QWizardPage>

class WizardPage : public QWizardPage {
  public:
    explicit WizardPage(QWidget* parent = nullptr);
};

WizardPage.cpp

#include "WizardPage.h"
#include "TreeView.h"
#include <QVBoxLayout>

WizardPage::WizardPage(QWidget *parent) : QWizardPage(parent) {
  auto *tree_view = new TreeView{this};
  registerField("index*", tree_view, "index", "index_changed");
  auto *layout = new QVBoxLayout{this};
  layout->addWidget(tree_view);
  setLayout(layout);
}

1 Ответ

0 голосов
/ 05 мая 2018

Я думаю, что в registerField() вы должны использовать SIGNAL(index_changed()) вместо "index_changed"

Что дает следующий вызов registerField()

registerField("index*", tree_view, "index", SIGNAL(index_changed()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...