• Qt封装窗口进dll须知


    前阵子项目需求我封装一个类似于MessageBox这个API创建的类似窗口给我们的程序使用,本着做好看界面的想法,我开始着手去做了,做了个demo也能用,但随着窗口写完实际放到程序里去用的时候,问题出来了。

    第一个问题:

      如果调用dll的程序是多线程,这时候qt的弊端来了,Qt只有一个GUI线程,当你调用QWinWidget win(parent);这句话,parent是HWND窗口句柄,qt会把这个窗口对应的threadid作为qt的GUI线程,这时候如果你程序的其他线程再调用这个dll去创建窗口,其他的线程统统会报错,Widgets must be created in the GUI thread.

    第二个问题:

      如果你的程序是qt程序,那么直接就GG了,qt程序的主线程就是GUI线程,这时候你再非GUI线程上调用dll创建窗口,那么也一样会报错Widgets must be created in the GUI thread.

    所以当你想要使用qt封装窗口进dll,那么一定要明确几点,调用dll的程序不能是QT程序,而且这个程序如果有多个线程都会调用dll的话,还得不能同时调用,至少目前试下来这样会出错,还是老老实实地用win32好了,难怪一开始搜封装qt窗口进dll,资料也特别少,这块能用dll的条件也异常的苛刻

  • 相关阅读:
    Dybala我错了%Dybala
    2019.7.22考试反思
    2019.7.19考试反思
    2019.7.18 考试反思
    数论总结之 乘法逆元
    数论总结之 卢卡斯定理
    游记 Day2
    【BSGS】Discrete Logging
    【卡特兰数】树屋阶梯
    【链接】 一篇很好的有关prufer序列的博文
  • 原文地址:https://www.cnblogs.com/suxia/p/14108260.html
Copyright © 2020-2023  润新知