zoukankan      html  css  js  c++  java
  • 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的条件也异常的苛刻

  • 相关阅读:
    java基础
    mysql入门
    基础整理
    遍历列表的两种方式
    oracle常用操作
    DIV+CSS网页布局技巧实例1:设置网页整体居中的代码
    html+css 淘宝首页静态页面案例
    WEB前端开发规范文档+CSS命名规范
    day05-苏宁易购导航html
    day04-html
  • 原文地址:https://www.cnblogs.com/suxia/p/14108260.html
Copyright © 2011-2022 走看看