gpt4 book ai didi

c++ - 如何修复运行时崩溃 - QObject::setParent:无法设置父级,新父级在不同的线程中?

转载 作者:行者123 更新时间:2023-11-30 04:05:50 25 4
gpt4 key购买 nike

我写了一个 QT - webkit 应用程序。当我的 pSeudo 驱动程序获取字符“l”时,此应用程序会触发回调。但是,应用程序在 firecallback 期间崩溃 - 它说 - QObject::setParent: 无法设置父级,新父级在不同的线程中。我不知道如何解决这个问题,我尝试执行 moveToThread,但没有帮助。请在这里帮助我。

#include <QtGui/QApplication>
#include <QApplication>
#include <QDebug>
#include <QWebFrame>
#include <QWebPage>
#include <QWebView>
#include <QThread>

#include <unistd.h>
#include <fcntl.h>


class DemoThread;

class MyJavaScriptOperations : public QObject {
Q_OBJECT
public:
QWebView *view;
DemoThread *m_pDemoThread;
MyJavaScriptOperations();
void firecb();
bool slot_installed;
signals:
void alert_script_signal();
public slots:
void JS_ADDED();
void loadFinished(bool);

private:

};

class DemoThread : public QThread {
public:

DemoThread( MyJavaScriptOperations *pJavascriptOp);
protected:
void run();
private :

MyJavaScriptOperations *m_pJavascriptOp;
};

DemoThread::DemoThread(MyJavaScriptOperations *pJavascriptOp):m_pJavascriptOp(pJavascriptOp)
{

}

void DemoThread:: run()
{
int filedesc = open("/dev/pSeudoDrv", O_RDONLY);
if(filedesc < 0)
{
qDebug()<<"Couldn't open Driver.";
}

unsigned char buff;

while(1)
{
read(filedesc,&buff, 1);

qDebug()<<"The code received is "<< buff;

if ( (m_pJavascriptOp->slot_installed == true) && (buff == 166))
{
m_pJavascriptOp->firecb();

}
qDebug()<<"Running Thread.";
sleep(6);

}
}

void MyJavaScriptOperations::JS_ADDED()
{
qDebug()<<__PRETTY_FUNCTION__;
view->page()->mainFrame()->addToJavaScriptWindowObject("myoperations", this);
}

void MyJavaScriptOperations::loadFinished(bool oper)
{
qDebug()<<__PRETTY_FUNCTION__<< oper;
slot_installed = true;

// firecb();

}

void MyJavaScriptOperations::firecb()
{
qDebug()<<__PRETTY_FUNCTION__;
view->page()->mainFrame()->evaluateJavaScript("JavaScript_function()");
}

MyJavaScriptOperations::MyJavaScriptOperations()
{
qDebug()<<__PRETTY_FUNCTION__;
view = new QWebView();
view->resize(400, 500);
connect(view->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(JS_ADDED()));
connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
view->load(QUrl("./index.html"));
view->show();

}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

MyJavaScriptOperations *jvs = new MyJavaScriptOperations;
DemoThread *thread = new DemoThread(jvs);
jvs->moveToThread(thread);
thread->start();
return a.exec();
}
#include "main.moc"

这是我得到的崩溃错误 -

./QT_DEMO 
MyJavaScriptOperations::MyJavaScriptOperations()
loaded the Generic plugin
The code received is 156
Running Thread.
The code received is 166
void MyJavaScriptOperations::firecb()
QObject::setParent: Cannot set parent, new parent is in a different thread

最佳答案

关于c++ - 如何修复运行时崩溃 - QObject::setParent:无法设置父级,新父级在不同的线程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23129096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com