hummingbird
@hummingbird

Почему не работает connect?

Здравствуйте!

Задача: отловить в QML файле сигнал и в дальнейшем в бэкенде передать значения в нужный слот.

В одном месте проекта все работает, а в этом нет.

Есть кнопка:
Button {
   id: deleteNewsButton
   text: "Del"
   onClicked: {
       mainWindow.deleteNews(id)
   }
}


Начало моего "прямоугольника":
Rectangle {
    id: mainWindow
    visible: true

    width: 800
    height: 600

    signal deleteNews(int news_id)

    // ...


Кстати, вот этот код спокойно выводит в консоль ID:
Component.onCompleted: {
    mainWindow.deleteNews.connect(test)
}

function test(news_id) {
    console.log("News ID: " + news_id)
}


То есть, вроде, все работает в этой части.
Переходим в бэкенд.

Слот:
public slots:
    void deleteNews(int news_id);


И, наконец, connect:
QQuickView *view = new QQuickView;
view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view->show();

QObject *object = view->rootObject();

QObject::connect(object, SIGNAL(deleteNews(int)), this, SLOT(deleteNews(int)));
// connect(object, SIGNAL(deleteNews(int)), this, SLOT(deleteNews(int))); // аналогичная ситуация


void MainWindow::deleteNews(int news_id) {
    qDebug() << "DELETE " << news_id;
}


В результате в консоль ничего не пишет. Этот connect, судя по всему, вообще игнорируется.
Что делаю не так? Подскажите, пожалуйста.
  • Вопрос задан
  • 436 просмотров
Пригласить эксперта
Ответы на вопрос 1
Zifix
@Zifix Куратор тега Qt
Barbatum
С одной стороны, это, конечно, боль работать в приложении с кашей из QWidgets и QML. Точно нельзя полностью перейти на QML? Если нельзя, то рабочее хотя и не красивое решение — сделать для работы с сигналами синглтон, создавать его на стороне QML и записывать туда ссылку на самого себя как инстанс.

Вот тут и тут так работает STDataProvider.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы