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

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

Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)的更多相关文章

  1. Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...

  2. WinAPI: ShellExecute - 打开外部程序或文件

    WinAPI: ShellExecute - 打开外部程序或文件 ShellExecute(   hWnd: HWND;        {指定父窗口句柄}   Operation: PChar;  { ...

  3. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

    atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...

  4. java调用dll或so动态库文件(c++/c)

    java调用dll或so动态库文件(c++/c) 博客分类:  工作 CC#C++JavaEclipse  java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CD ...

  5. Qt 编程指南 4 按钮2 打开网页和文件夹

    功能:  按键打开文件夹和网页 效果: 教程 1 添加两个链接按钮   分别命名 commandLinkButtonFolder 和  commandLinkButtonWeb 2 创建项目 改变调试 ...

  6. Qt获取选择的文件夹和文件路径

    获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...

  7. Win7打开新的文件夹总会以新窗口的形式打开

    首先可以在 组织-->文件夹和搜索选项   中设置“在同一窗口中打开每个文件夹” 如果设置后不起作用还可以 管理员方式执行以下两条命令 在开始菜单-运行中输入regsvr32 "%Sy ...

  8. 给JAVA的eclipse IDE 在线安装 SVN插件 / 给 eclipse 添加打开所在的文件夹功能

    http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 首先,在这个网址找着最新在线安装链接 就是那个 Links for ...

  9. dialogs打开对话框选定文件夹,getopenfilename获取文件名

    如果需要使用“打开”.“打印”等Excel内置对话框已经具有的功能,可以使用代码直接调用这些内置的对话框,如下面的代码所示. #001  Sub DialogOpen() #002      Appl ...

随机推荐

  1. UIView 中 frame, bounds, center 属性的关系

    最近一直在学 iOS 开发,所以专门创建了这样一个类别,将自己学习中的一些问题整理,记录下来.由于自己是初学者,所以所写的文章非常基础,写这个类别一是为了给自己留下存 档,二是为了给和我有同样问题的初 ...

  2. VS2015自定义注释内容

    一直想自动添加一些注释信息,找了好多种方式:各种插件什么的,最后偶然发现可以修改vs的模板可以做到,下面介绍如何改 首先找到vs的安装目录,如下是我的安装目录: D:\Program Files\VS ...

  3. js颜色转换

    很久之前面试遇到过一个题.写个颜色转换的方法. function RGB2Color(r,g,b) { return '#' + byte2Hex(r) + byte2Hex(g) + byte2He ...

  4. UVa1585 Score

    #include <stdio.h> int main(){    int T, O, score;    char str[81], *p;    scanf("%d" ...

  5. Javaweb统计在线人数的小栗子

    最近在学习Javaweb相关的内容(不黑不吹之前对web开发零基础),下面通过一个统计在线人数的小栗子讲讲Servlet监听器吧 开发环境 eclipse  tomcat 7 先说说这个小栗子的构思: ...

  6. Web学习之自定义标签

    1.编写一个实现Tag接口的Java类(标签处理器类) package me.gacl.web.tag; import java.io.IOException; import javax.servle ...

  7. IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)

    表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...

  8. IOS 播放音频

    1,播放短音频 #import <AudioToolbox/AudioToolbox.h>#import "GLYViewController.h"static voi ...

  9. QQwry

    http://blog.runphp.net/archives/156 http://wenku.baidu.com/link?url=yvd3_EpMM66r6H4qkx3oqcaU2JZNAQv_ ...

  10. Delphi 的动态数组

    传统的Pascal 语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数.专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存. Delp ...