При попытке добавить производный 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);
}