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
Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)的更多相关文章
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...
- WinAPI: ShellExecute - 打开外部程序或文件
WinAPI: ShellExecute - 打开外部程序或文件 ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; { ...
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...
- java调用dll或so动态库文件(c++/c)
java调用dll或so动态库文件(c++/c) 博客分类: 工作 CC#C++JavaEclipse java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CD ...
- Qt 编程指南 4 按钮2 打开网页和文件夹
功能: 按键打开文件夹和网页 效果: 教程 1 添加两个链接按钮 分别命名 commandLinkButtonFolder 和 commandLinkButtonWeb 2 创建项目 改变调试 ...
- Qt获取选择的文件夹和文件路径
获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...
- Win7打开新的文件夹总会以新窗口的形式打开
首先可以在 组织-->文件夹和搜索选项 中设置“在同一窗口中打开每个文件夹” 如果设置后不起作用还可以 管理员方式执行以下两条命令 在开始菜单-运行中输入regsvr32 "%Sy ...
- 给JAVA的eclipse IDE 在线安装 SVN插件 / 给 eclipse 添加打开所在的文件夹功能
http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 首先,在这个网址找着最新在线安装链接 就是那个 Links for ...
- dialogs打开对话框选定文件夹,getopenfilename获取文件名
如果需要使用“打开”.“打印”等Excel内置对话框已经具有的功能,可以使用代码直接调用这些内置的对话框,如下面的代码所示. #001 Sub DialogOpen() #002 Appl ...
随机推荐
- UIView 中 frame, bounds, center 属性的关系
最近一直在学 iOS 开发,所以专门创建了这样一个类别,将自己学习中的一些问题整理,记录下来.由于自己是初学者,所以所写的文章非常基础,写这个类别一是为了给自己留下存 档,二是为了给和我有同样问题的初 ...
- VS2015自定义注释内容
一直想自动添加一些注释信息,找了好多种方式:各种插件什么的,最后偶然发现可以修改vs的模板可以做到,下面介绍如何改 首先找到vs的安装目录,如下是我的安装目录: D:\Program Files\VS ...
- js颜色转换
很久之前面试遇到过一个题.写个颜色转换的方法. function RGB2Color(r,g,b) { return '#' + byte2Hex(r) + byte2Hex(g) + byte2He ...
- UVa1585 Score
#include <stdio.h> int main(){ int T, O, score; char str[81], *p; scanf("%d" ...
- Javaweb统计在线人数的小栗子
最近在学习Javaweb相关的内容(不黑不吹之前对web开发零基础),下面通过一个统计在线人数的小栗子讲讲Servlet监听器吧 开发环境 eclipse tomcat 7 先说说这个小栗子的构思: ...
- Web学习之自定义标签
1.编写一个实现Tag接口的Java类(标签处理器类) package me.gacl.web.tag; import java.io.IOException; import javax.servle ...
- IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)
表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...
- IOS 播放音频
1,播放短音频 #import <AudioToolbox/AudioToolbox.h>#import "GLYViewController.h"static voi ...
- QQwry
http://blog.runphp.net/archives/156 http://wenku.baidu.com/link?url=yvd3_EpMM66r6H4qkx3oqcaU2JZNAQv_ ...
- Delphi 的动态数组
传统的Pascal 语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数.专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存. Delp ...