zoukankan      html  css  js  c++  java
  • Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    QProcess *process = new QProcess(this);
        QFileInfo fileinfo(appUrl);
     
        QString appPath = QApplication::applicationDirPath()+SAVEDIR+"/"+fileinfo.fileName();
        bool res = process->startDetached(appPath,QStringList());
        if (res)
        {
            accept();
        }
        else
        {
            MyHelper::ShowMessageBoxError("下载完成但自动升级失败,请手工安装升级包!");
            QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+SAVEDIR));
            reject();
        }
    • 细节1:

    原本代码中是这样写的:
    process->startDetached(appPath);
    测试环境没任何问题,但是生产环境却不能调用外部程序,最终发现生产环境的文件路径在
    C:Program Files (x86)...带有空格,造成调用失败,于是google之后尝试
    process->startDetached(appPath,QStringList());
    问题得到解决。

    • 细节2:

    QDesktopServices::openUrl(QUrl(QApplication::applicationDirPath()+SAVEDIR));
    这地方同样存在这样的问题,如果使用QUrl::fromLocalFile进行处理,就可以正常打开文件夹:
    QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+SAVEDIR));

    除此之外,还有一个和这段代码无关的问题:Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错,即:
    VC DLL头文件示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef CDOUBLEREADERDLL 
    #ifdef CDOUBLEREADERDLL_EXPORTS
    #define CDOUBLEREADERDLL extern "C" __declspec(dllexport)
    #else
    #define CDOUBLEREADERDLL extern "C" __declspec(dllimport)
    #endif
    #endif
      
    # define BUFFERSIZE 20
    # define READTIMEOUT 1000
    // 打开串口
    CDOUBLEREADERDLL bool _stdcall  RD_Open(int iPort,unsigned long iBaudRate);
    ...

    Qt中调用示例:

    1
    2
    3
    4
    extern "C"
    {
        #include "drivers/CdoubleReaderDll.h"
    }

    转载请注明:梧桐树下 » Qt打开外部程序和文件夹需要注意的细节

    http://www.pfeng.org/archives/808

  • 相关阅读:
    linux目录文件与系统启动(1)系统目录简介
    linux常用命令
    linux命令行
    关于Xshell6无法连接虚拟机centOS7的解决方案
    远程连接服务器和查错
    ip、端口、协议、网关、DNS
    linux分区
    linux系统补丁更新 yum命令
    VMWare网络适配器的三种模式
    springboot 配置springmvc?
  • 原文地址:https://www.cnblogs.com/findumars/p/5111798.html
Copyright © 2011-2022 走看看