c++ - 为什么我编辑的 WtWithQt 示例会崩溃?

标签 c++ qt wt

我正在开发一个应用程序,使用 Qt 作为主要逻辑,使用 Wt 作为用户界面。

但是我遇到了一个我无法解决的问题。我已将其应用于 wtwithqt 示例。

我只更改了“passGreet”函数以异步而不是直接调用信号。

此时应用程序崩溃。我真的不明白为什么。

编辑:实际上当它在 "HelloApplication::doGreet(const QString& qname)"

处编辑 Wt 对象时它真的崩溃了

enter image description here 图片:https://dl.dropbox.com/u/90945130/crash.png

可能与从 Qt 事件循环开始的 Action 起源有关?

这是代码。

#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

提前感谢您的帮助!

最佳答案

你在这里展示的是一个更新 Wt 小部件树的 QThread,它没有获取 WApplication::UpdateLock。除了确保您对小部件树具有独占访问权之外,更新锁还设置了一些线程本地存储,并且缺少 TLS (WApplication::instance()) 会导致您的应用程序崩溃。

所需的锁定机制可能很复杂 - 使用 WServer::post() 可以更容易地避免死锁。

关于c++ - 为什么我编辑的 WtWithQt 示例会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645849/

相关文章:

c++ - osx lion 上的 unsigned char 限制为 127?

c++ - 从 SSE 切换到 AVX 会受到惩罚吗?

c++ - 从内存导入 key 时 Crypto++ BERDecode 异常?

Qt QQmlApplicationEngine拒绝显示qml代码

c++ - 向 Wt WTable 小部件添加网格线

c++ - 从其他网页调用 c++ web 工具包小部件?

c++ - '\n' 和 std::endl 有什么区别

QtCreator 热键移动选定 block

c++ - 从qml获取信号到Qt中的c++类

c++ - 如何告诉 Controller 调用什么 View ?