Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT应用程序在调试模式下启动时挂起_C++_Qt_Debugging_Qml_Qtwebengine - Fatal编程技术网

C++ QT应用程序在调试模式下启动时挂起

C++ QT应用程序在调试模式下启动时挂起,c++,qt,debugging,qml,qtwebengine,C++,Qt,Debugging,Qml,Qtwebengine,我试图创建一个简单的QT应用程序,其中前端是HTML,后端是原生的。我使用来自QtWebView(QML)和QWebChannel示例的代码构建了一个小演示 如果我启动应用程序的发布版本,一切都会按预期进行,只是您不能真正调试发布版本。如果我启动调试构建,应用程序将启动,然后停止,就像遇到调试断点一样(我没有设置断点),在我按resume之后,应用程序将永远挂起 我目前正在使用Windows7x86机器进行开发。QT版本是5.5 我将演示应用程序上载到我的google drive: 你知道为什么

我试图创建一个简单的QT应用程序,其中前端是HTML,后端是原生的。我使用来自QtWebView(QML)和QWebChannel示例的代码构建了一个小演示

如果我启动应用程序的发布版本,一切都会按预期进行,只是您不能真正调试发布版本。如果我启动调试构建,应用程序将启动,然后停止,就像遇到调试断点一样(我没有设置断点),在我按resume之后,应用程序将永远挂起

我目前正在使用Windows7x86机器进行开发。QT版本是5.5

我将演示应用程序上载到我的google drive:

你知道为什么调试版本不能工作吗

编辑:这是我的代码,按要求

TestSuite.pro

TEMPLATE = app

QT += qml quick webengine webchannel websockets
CONFIG += c++11

SOURCES += main.cpp \
    shared/websocketclientwrapper.cpp \
    shared/websockettransport.cpp \
    Log.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
include(deployment.pri)

HEADERS += \
    shared/websocketclientwrapper.h \
    shared/websockettransport.h \
    Log.h
main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtWebEngine/QtWebEngine>
#include <QWebSocketServer>
#include <QWebChannel>

// From the webchannel example
#include "shared/websocketclientwrapper.h"
#include "shared/websockettransport.h"

// Simple class with 1 method "void logMessage(const QString &msg);" which writes a string to qDebug()
#include"Log.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QtWebEngine::initialize();

    //setup WebSocket server
    QWebSocketServer server(QStringLiteral("QWebChannelServer"), QWebSocketServer::NonSecureMode);
    if (!server.listen(QHostAddress::LocalHost, 12344)) {
        qFatal("Failed to open web socket server.");
        return 1;
    }

    //wrap WebSocket clients in QWebChannelAbstractTransport objects
    //see:qtwebchannel/examples/webchannel/standalone
    WebSocketClientWrapper clientWrapper(&server);

    //setup the channel and connect to WebSocket clients
    QWebChannel channel;


    // Register Objects
    Log l;
    channel.registerObject("Log", &l);


    // Start Application
    QObject::connect(&clientWrapper, &WebSocketClientWrapper::clientConnected,
                     &channel, &QWebChannel::connectTo);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}
index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>m2suite</title>
        <script type="text/javascript" src="qtwebchannel/qwebchannel.js"></script>
        <script type="text/javascript" src="script/main.js"></script>
</head>
<body>
        <a onclick="Log.logMessage('test')">Log.sendMessage</a><br>
</body>
</html>

如果挂起调试,只需暂停应用程序并检查线程的位置。继续,然后再次暂停。它会给你一个提示。无论如何,在你的问题中发布代码。看起来它首先在Chrome_IOThread中停止。如果单击“恢复”,则无法再次暂停。除停止按钮外,所有按钮都显示为灰色。如果它挂起在调试中,只需暂停应用程序并检查线程的位置。继续,然后再次暂停。它会给你一个提示。无论如何,在你的问题中发布代码。看起来它首先在Chrome_IOThread中停止。如果单击“恢复”,则无法再次暂停。除停止按钮外,所有按钮均为灰色。
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>m2suite</title>
        <script type="text/javascript" src="qtwebchannel/qwebchannel.js"></script>
        <script type="text/javascript" src="script/main.js"></script>
</head>
<body>
        <a onclick="Log.logMessage('test')">Log.sendMessage</a><br>
</body>
</html>
var Log;

var socket = new WebSocket("ws://127.0.0.1:12344/");

socket.onopen=function(){
    var c = new QWebChannel(socket, function(channel) {
        //connection to server succeeded, objectsavailablevia:
        Log = channel.objects.Log;
    });
}