• Qt编程之悲惨世界


    最近需要给人写点基于QtWebkit的代码,算是领教了Qt编程的痛苦之处。

    1. QNetworkConfigurationManager::isOnline() 只有在编译平台上能运行,拷贝到其他Windows系统中一直返回false。
    2. Qt::WindowStaysOnTopHint在某些环境下经常无效。
    3. Qt4.8.4版本的QtWebkit在Win7 32bit 上播放YouTube视频会出现崩溃现象。

    每一点都是致命的,直接导致了迟迟无法收工。这几天虽然染病在身,却依然在各个不同的平台上进行测试。有一些进一步的理解,但是没有完美的解决方案。

    1 对于QNetworkConfigurationManager::isOnline() 来说,虽然采用同一个Qt安装包,可能的问题是 Qt 安装包会在最后进行Platform Patch,替换QtCore.dll和QtNetwork.dll之类的文件。这样对于希望制作独立的安装来说简直是一个噩梦。只有约定的msi安装包如何完成也是一个问题。

    *** 后来发现其中一个原因是没有拷贝依赖的plugin文件。Depends 里根本发现不了,运行程序时尝试删除plugin文件夹才找到所有依赖的plugin文件。

    2 Qt::WindowStaysOnTopHint在WinXP可以工作,但是Win7或者Win8下就有各种问题,时常无法将窗口置顶。比较诡异的是,将文件放到一些文件夹下无效,换个文件夹又有效了,匪夷所思。

    最后很无奈,加了以下的代码:

    void MainWindow::showEvent(QShowEvent * event)
    {
        if (event->type() == QEvent::Show)
        {
            activateWindow();
            setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);
            SetTopMost();
        }
    }
    

    3 QWebView崩溃的位置还有所差别,一会是heap问题,一会是消息处理问题,毫无头绪。换成Qt5.0.2倒是没有发现问题,就是依赖的文件一下子增加了好多。

    有时候使用Qt的话,还是挺悲惨的,很容易掉坑里。这里不免要吐槽一下,QtWebkit编译一次就是几小时,实在痛苦。

    // QMainWindow 置顶
    setWindowFlags(Qt::Widget | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowStaysOnTopHint);
    
    >  QtWebKitd4.dll!__NPN_DeallocateObject()  + 0xe bytes  C++
     
    >  QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags)  Line 810  C++
  • 相关阅读:
    关于dllimport的使用
    公众平台返回原始数据为: 错误代码-40164
    CentOS7.4 系统下 Tomcat 启动慢解决方法
    PyCharm实现高效远程调试代码
    代码比较工具推荐
    CentOS7 下源码安装 python3
    linux定时任务调度定系统——opencron
    使用 ISO镜像配置 本地yum 源(RHEL, CentOS, Fedora等适用)
    Error: rpmdb open failed
    部署Redis(脚本安装)
  • 原文地址:https://www.cnblogs.com/huys03/p/3163283.html
Copyright © 2020-2023  润新知