问候overflowers。 我想一个GUI添加到现有项目。 更具体地涉及加载为插件.so
文件(或当在Win32编译.dll
)
该项目有其自己的线程执行已处理的便携性。 我知道Qt拥有自己的跨平台的线程模型,但它是最好留在这个现有的线程模型内。
我对Qt的老兵那里[我才刚刚开始阅读文档】问题是:有没有可能以上述嵌入使用Qt的GUI的插件? 该插件已经是一个命令行界面,我想有GUI可选的,即使它在编译的。由于这些标准功能得到由主程序调用的GUI(我假设将生活在另一个线程)将不得不可访问或能够有方法调用它,以使CLI线程可以共存和标准功能可以与两个接口中的任意置换工作。
编辑1:
与代码打了一下后,我能够从插件推出一个简单的GUI。 该插件已经是CLI并具有从主程序调用的函数。 我只是创建了该插件的初始化一个新的线程,并从那里发动阻断GUI:
QApplication app(NULL, NULL);
window = new zGui;
window->show();
app.exec();
这里的问题是:是否有可能与GUI或沟通,而从CLI线程访问GUI元素?
编辑2:一些成果
好了,到目前为止,开始在一个单独的线程阻塞GUI已经没有任何问题的工作。 我能够访问小部件在GUI中从主插件线为好。 据我所知,这种做法气馁,因为不仅每到目前为止,还了Qt库被吐出约被另一个线程不安全的访问提供了一些警告我收到的答案。
截至目前我只在Linux环境中工作,也许真正的问题将在其他系统上提出的。 我只看到了一个小故障,我不能肯定是相关的说:
在改变进度条微件的最大和最小值,进度条显示为空白。 我可以通过下面的一个简单的解决适用于本
//here is me setting the values
window->progressBar->setMaximum(character.maxHP);
window->progressBar_2->setMaximum(character.maxMP);
window->progressBar->setValue(character.curHP);
window->progressBar_2->setValue(character.curMP);
//and here is the fix
window->progressBar->setVisible(false);
window->progressBar->setVisible(true);
window->progressBar_2->setVisible(false);
window->progressBar_2->setVisible(true);
我想,我的最后一个问题是“什么具体在哪里从其他线程访问Qt的图形用户界面是不安全的,为什么情况?