Почему мой отредактированный пример WtWithQt вылетает?

Я разрабатываю приложение, используя Qt для основной логики и Wt для пользовательского интерфейса.

Однако я пришел к проблеме, которую не смог решить. Я применил это к примеру с wtwithqt.

Я только изменил функцию «passGreet», чтобы вызывать сигнал асинхронно, а не напрямую.

Приложение вылетает в этот момент. Я не очень понимаю, почему.

РЕДАКТИРОВАТЬ: На самом деле он действительно падает, когда редактирует объект Wt в "HelloApplication::doGreet(const QString& qname)"

введите описание изображения здесь
картина: https://dl.dropbox.com/u/90945130/crash.png

Возможно, что-то связано с источником действия, начиная с цикла событий Qt?

Вот код

#include "HelloApplication.h"#include "QtObject.h"
#include <QDebug>
#include <QThread>

QtObject::QtObject(HelloApplication *wt, QObject *parent)
: QObject(parent),
wt_(wt)
{}

void QtObject::passGreet(const QString& name)
{
//Q_EMIT greet(name);
QMetaObject::invokeMethod(this, "greet", Qt::QueuedConnection, Q_ARG(QString, name));
}

void QtObject::doGreet(const QString& name)
{
wt_->doGreet(name);
}

Остальная часть неизмененного кода находится здесь: http://pastebin.com/fih6P2eH

Спасибо за любую помощь заранее!

0

Решение

Здесь вы видите QThread, который обновляет дерево виджетов Wt и не захватывает WApplication :: UpdateLock. Помимо обеспечения эксклюзивного доступа к дереву виджетов, блокировка обновления также устанавливает локальное хранилище некоторого потока, а отсутствующий TLS (WApplication :: instance ()) приводит к сбою приложения.

Требуемый механизм блокировки может быть сложным — проще использовать WServer :: post (), чтобы избежать взаимных блокировок.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]