-
对于qt程序打开后进行的一些操作怎么使第二次打开后是上一次操作后的样子
2020-04-15 10:40:03对于qt程序打开后进行的一些操作怎么使第二次打开后是上一次操作后的样子,比如说我有一个treewidget,添加删除修改一些节点后,第二次打开会该程序会是我上一次修改后的样子, -
Qt程序怎么在别人的电脑上运行
2018-08-14 23:46:53电脑左下角打开终端Qt 5.4 for Desktop (MinGW 4.9 32 bit): 打开终端后切换到刚才保存程序的文件夹: 执行命令:windeployqt 可执行程序名 程序所依赖的库已经全部复制到程序所在的文件夹下: 将这个...先选择Release方式编译:
将编译出来的程序.exe单独复制到一个文件夹:
电脑左下角打开终端Qt 5.4 for Desktop (MinGW 4.9 32 bit):
打开终端后切换到刚才保存程序的文件夹:
执行命令:windeployqt 可执行程序名
程序所依赖的库已经全部复制到程序所在的文件夹下:
将这个文件夹打包到另一台电脑,程序就能运行了。
-
QT-怎么添加程序图标
2016-05-14 21:18:40QT添加程序图标,改程序图标真的是太容易了。至少比MFC那些繁琐的步骤容易。步骤如下: 1.把需要添加的图标放到工程目录下,不能放在build文件夹下。 如图: 2.打开.pro工程文件 添加代码: RC_ICONS = XXX.ico ...QT添加程序图标,改程序图标真的是太容易了。至少比MFC那些繁琐的步骤容易。
步骤如下:
1.把需要添加的图标放到工程目录下,不能放在build文件夹下。
如图:2.打开.pro工程文件
添加代码: RC_ICONS = XXX.ico (XX是图标的名称)
如图:3.然后直接运行就行了
如图:更换图标步骤如下:
1.把需要更换的图标放到工程目录下
如图:2.打开.pro文件,更改图标的名字
如图:3.这一步很重要,如果不执行这一步是没办法更换的.
那就是执行qmake
如图:4.运行即可
如图: -
QT程序无法定位程序输入点
2020-05-02 21:39:34最近用Qt写程序 发现直接打开会报错 后面到网上找了很多方法 比如说改环境变量的 还有把dll放到当前目录的 但是都没有用 希望能有高人指点一下是怎么回事! -
qt和c#怎么选_Qt程序中调用C#编写的dll(推荐)
2020-12-28 20:58:041、打开Visual Studio,新建一个C#的Class Library项目(这里选择的是.Net Framework 4),项目名为CSharpDll。2、由于默认没有引入Forms等UI库,先在reference中添加引用System.Windows.Forms以便可以在测试中使用...1、打开Visual Studio,新建一个C#的Class Library项目(这里选择的是.Net Framework 4),项目名为CSharpDll。
2、由于默认没有引入Forms等UI库,先在reference中添加引用System.Windows.Forms以便可以在测试中使用MessageBox等。
3、最终C#编写的dll的源代码如下图所示,命名空间为CSharpDll,公共类为CSharpClass。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CSharpDll
{
public class CSharpClass
{
public CSharpClass() { }
public int add(int a , int b)
{
return a + b;
}
public void substract( int a , int b , ref int c)
{
c = a - b;
}
public static void showBox(string str)
{
MessageBox.Show("C#:" + str);
}
}
}
里面包含一个加法add,一个减法substract(为了测试指针,所以在减法的返回类型是void,而把计算结果通过ref参数c给返回),一个showBox方法(里面采用C#的MessageBox对话框显示用户输入的参数字串)
4、对project进行release build,在release目录下生成了CSharpDll.dll(待会用到)。
5、关闭CSharpDll项目,另外新建一个C++ CLR类型的Class Library项目(选择与C#项目相同的.Net Framework 4),项目名称为CppDll。
一开始我用的VS2019,发现VS2019好像无法新建 C++ CLR类型的Class Library项目了,所以学习微软的技术一定要小心,学习主流的支持很久的技术,尽量不要学习新出的技术,如果必须学新技术,一定要认真考量,一些边缘化的技术一定不要学习,没准哪天微软就不维护了。
6、选择Project->CppDll Properties…,在弹出的属性页面选择“Add New Reference..”,点击“browsing.”后选择CSharpDll项目中release目录下的CSharpDll.dll。
7、选择CSharpDll.dll后,可以看到在项目属性的References中出现了CSharpDll这个Library。
8、在CppDll项目中的CppDll.h中利用_declspec(dllexport)导出对应的3个接口函数add,substract,showBox 。需要using namespace System::Reflection,对于这里的showBox,其参数不能采用CSharpDll里面的showBox参数的String类型,而是使用const char* 类型。
主要代码如下所示:
// CppDll.h
#pragma once
using namespace System;
using namespace System::Reflection;
__declspec(dllexport) int add(int a, int b)
{
CSharpDll::CSharpClass obj;
return obj.add(a, b);
}
__declspec(dllexport) void substract(int a, int b, int *c)
{
CSharpDll::CSharpClass obj;
obj.substract(a, b, *c);
}
__declspec(dllexport) void showBox(const char* content)
{
CSharpDll::CSharpClass obj;
String^ str = gcnew String(content);
obj.showBox(str);
}
namespace CppDll {
public ref class Class1
{
// TODO: 在此处添加此类的方法。
};
}
9、选择release方式build CppDll项目,在release文件夹中生成了CppDll.dll文件,可以看到同时其也将引用的CSharpDll.dll也给拷贝到release文件夹中了。
10、接下来在Qt中进行调用, 在QtCreator中新建一个TestCSharpDll GUI项目,编译器选的mingw。通过VS自带的命令行工具中的dumpbin工具可以查看CppDll.dll导出的函数接口。
dumpbin -exports (+dll路径)
在TestCSharpDll工程中通过typedef定义函数指针,同时采用QLibrary动态加载并resolve函数。
在这里.dll的路径设为当前目录下“./CppDllMingW.dll”,也就是编译好的程序exe同一目录下的dll,去resolve由普通导出方式的接口即“?add@@YAHHH@Z”。
主要代码如下所示:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
typedef int (*x_add)(int a , int b);
typedef void (*x_substract)(int a , int b , int* c);
typedef void (*x_showBox)(const char* content);
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
//add
void MainWindow::on_pushButton_clicked()
{
int a = ui->lineEdit->text().toInt();
int b = ui->lineEdit_2->text().toInt();
QLibrary library("./CppDll.dll");
if(library.load()){
x_add add = (x_add)library.resolve("?add@@YAHHH@Z");
if(add){
QString str = QString::number(add(a , b));
QMessageBox::information(this , "call add from dll" , str);
}
}
}
//sub
void MainWindow::on_pushButton_2_clicked()
{
int a = ui->lineEdit_3->text().toInt();
int b = ui->lineEdit_4->text().toInt();
int c = 0;
QLibrary library("./CppDll.dll");
if(library.load()){
x_substract sub = (x_substract)library.resolve("?substract@@YAXHHPAH@Z");
if(sub){
sub(a , b , &c);
QString str = QString::number(c);
QMessageBox::information(this , "call sub from dll" , str);
}
}
}
//showBox
void MainWindow::on_pushButton_3_clicked()
{
QLibrary library("./CppDll.dll");
if(library.load()){
x_showBox showBox = (x_showBox)library.resolve("?showBox@@YAXPBD@Z");
if(showBox){
showBox("showBox!");
}
}
}
编译TestCSharpDll工程,将CppDll.dll和CSharpDll.dll复制到同一目录下,执行TestCSharpDll.exe,可看出点击按钮后,通过QLibrary进行动态resolve,均正常调用。
调用add函数
调用sub函数
调用showBox函数
最好是将相关dll置于同一目录下运行,不然会出现“未能加载文件或程序集”的异常。针对.lib链接方式,理应是置于同一目录下。而针对QLibrary进行resolve方式,可能通常一开始的想法是,CppDll.dll和CSharpDll.dll放在与程序不同目录的地方,程序中利用了QLibrary指定了CppDll.dll的方式进行加载,而CppDll.dll和CSharpDll.dll,因此程序调用CppDll.dll里面的函数时,CppDll.dll会找到与CppDll.dll同一目录下的CSharpDll.dll,然而CppDll.dll在被程序进行加载时,其继承了程序的环境变量,因此会从程序的当前目录下去查找,所以最好还是将CppDll.dll和CSharpDll.dll放置于程序同一目录下,同时QLibrary加载当前目录下的CppDll.dll。当然,部署到另外一台机器上时,目标机器还是需要安装.Net Framework,其版本至少不能低于当前CSharpDll.dll所使用的版本。
总结
到此这篇关于Qt程序中调用C#编写的dll的文章就介绍到这了,更多相关Qt 调用C#编写的dll内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
-
Qt程序打包发布
2017-08-29 22:10:46我们在开发Qt项目时,难免会遇到程序打包发布的问题。有的时候我们将程序编译生成一个程序,放到别人的电脑上就运行不起来了。 这是因为别人的电脑上没有安装开发环境。其实如果我们自己讲生成的可执行程序包换个...概述:
我们在开发Qt项目时,难免会遇到程序打包发布的问题。有的时候我们将程序编译生成一个程序,放到别人的电脑上就运行不起来了。
这是因为别人的电脑上没有安装开发环境。其实如果我们自己讲生成的可执行程序包换个路径再打开,也许你就运行不了了。提示少了某些库。因此就设计到打包问题。将我们的可执行程序不管发到哪个路径、放到谁的电脑上,都能运行起来。那么该怎么打包程序发布呢?
步骤:
1 首先我们需要编译一个release版本的可执行程序。
2 将可执行程序拷贝到一个你打包的文件夹(建议新建一个文件夹用来打包发布程序)。
3 找到电脑上windeployqt.exe的路径 (这里我的路径是在:D:\Qt\setup\5.6\mingw49_32\bin\windeployqt.exe)
4 然后建立一个脚本来执行打包。这里我建立一个run.bat,脚本中的内容为
D:\Qt\setup\5.6\mingw49_32\bin\windeployqt.exe xxx.exe
pause
注:第一行为打包工具的路径 后面跟可执行文件名字
5 接着双击run.bat就可以自动将可执行程序依赖的库打包到文件夹中了。
6 双击运行可执行程序,没问题的话就可以将文件夹压缩发布了。
注意:
运行run.bat将依赖库拷贝到文件夹后,一定要测试下。有时候windeployqt.exe也不一定能够拷贝完全。如一些第三方库,由于windeployqt.exe是Qt提供的,这些第三方库不见得能找得到。这时候需要手动将其拷贝到当前文件夹中来,还有项目中用到的动态库也需要手动拷贝到文件夹中来。 -
Ubuntu QT程序的发布
2021-02-26 09:53:17在Ubuntu 用QT调试程序后,怎么打包发布到其他没安装QTUbuntu上运行呢。结合其他文章,自己操作一遍记录下来。 一、QT构建成Release 在QT直接编译构建Release模式,生成build-xxxx-Desktop_Qt_5_9_0_GCC_64bit-... -
Qt学习: 教你如何打包一个Qt程序
2017-10-07 14:55:30当我们用Qt写好一个小程序,或者软件之后,怎么样打包才能让解压包发给其他小伙伴,而且能够正常运行呢?首先打开你写的程序,选择release,然后运行.由于缺少dll文件,所以不能正常编译运行.我的电脑是win8.1,所以... -
Linux QT 程序打包发布
2019-08-21 10:51:33怎么右键新建文件 2.1 在桌面上右键“打开终端” 2.2 在终端我们使用cd命令进入用户目录下的模板文件夹。cd 模板 2.3 然后使用vi命令在模板文件夹里面创建一个空白文件。vi 空白文件 2.4 我们直接输入“:wq!”然后... -
QT中启动怎么打开.chm
2013-03-03 13:19:22所要包含的头文件 #include QProcess> QProcess * mp_helpProcess = new QProcess(this); QStringList argument("help.chm"); mp_helpProcess->start("hh.exe", argument);//运行另一个程序片段的代码 -
请教:QTCREATOR写的程序,怎么在VS2008中打开和编译?
2013-01-24 17:01:31现在我想试试这个程序在WINCE上运行的效率怎么样,于是搭建了 VS2008+QT4.7.4的开发环境,在VS2008中可以成功创建QT程序,并可以选择菜单中Qt/Creat basic .pro File 生成.pro文件,用QTCREATOR打开。 但是,我用QT... -
树莓派设置开机自启动Qt程序
2019-12-24 15:17:391.开始使用的修改rc.local 的方式,不管怎么样,都不行,之后采用了如下的方式; 2. 树莓派开机启动流程:自动登录–>自动启动窗口–>自动运行用户程序 打开控制终端 cd /home/pi/.config (.config为... -
qt的qfiledialog怎么判断打开的是不是一张图片_朋友圈里美美的照片怎么来的?看看这几个图片小程序...
2020-12-18 15:10:54一、图片处理九宫格拼图图片处理九宫格拼图是一款照片修饰的微信小程序。平时看到一些好友晒盆友圈的照片拍版是不是特别高大上,觉得好厉害呀,怎么可以这样弄?想不想自己也发一次这样的微博盆友圈呢。打开图片处理... -
QT代码打包,qml程序无法运行怎么解决
2020-03-24 16:52:243.按“WIN”键,找到QT软件,选中生成release的对应 工具,打开它有5个(对应!,2个32,3个64,名字是不一样的) 4.输入 ①cd "+单独 .exe 的路径" -> Enter (PS:cd 后面没有冒号 路径复制... -
QT中用QStettings来实现QFileDialog::getOpenFileName记住上次的打开路径,重新打开程序时,可以获取上次...
2018-08-10 11:26:42QFileDialog::getOpenFileName可以获取文件名,但是如果想每次打开时,都是上次打开的路径,应该怎么操作。 我们可以使用QSettings来实现这个功能。 有时,在不修改代码的情况下(在实际的应用中也不可能修改代码... -
ipython源代码怎么打开_CentOS 6.4 中IPython如何启动Qt控制台和NoteBook?
2020-12-24 09:05:59在CentOS 6.4 中安装好IPython后,可以快捷键Alt+F2,出现如下画面:然后输入ipython qtconsole --pylab再回车即可:如此即可出现ipython 基于Qt的控制台:这样做的好处是:并不出现shell控制台在背后运行,只有... -
qt窗口切换的时候窗口1关闭窗口2打开时程序任务栏图标消失怎么办
2015-05-22 07:54:26第一个窗口为QDidget,第二个窗口是QMainWidget,主程序 main(){ 中先显示的是第一个窗口,}; 新手一枚,跪求怎么破? 没有c币见谅! -
将Qt制作的程序生成exe文件
2020-08-02 11:32:22制作出来的窗体不能只在Qt里面用,必须打包成一个可以在...我们把exe复制到一个单独的文件夹中,我放在F:\Users\MicreaVI\Desktop\demo中,然后打开Qt命令提示符,安装的时候自带的,要选择MinGW的 输入cd F:\User. -
QT5.8,打开了多个窗体,怎么读取当前活动窗体的Label控件中的图片?
2019-01-31 19:22:11本小白在用QT5.8做一个opencv图像处理的应用程序,需要同时打开多个窗体,窗体上用Label控件显示图片,由于不知道如何获取当前活动窗体中的图片,没办法进行下去,希望有办法解决的大佬们能够提供帮助 -
在Windows 下的 Qt 应用程序获得 Administrator 权限
2020-04-25 10:56:45今天用到写注册表,之前都写成功了,后面重新打开怎么都写不成功,肯定不是代表问题,后面想了下,之前是使用的管理员权限打开的IDE,还是VSIDE, 今天是使用QtCreator普通打开的,所以执行了代码,但是却注册表更改... -
python编程界面怎么打开-为Python程序添加图形化界面的教程
2020-11-01 12:43:56Python支持多种图形界面的第三方库,包括:TkwxWidgetsQtGTK等等。但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。Tkinter我们来... -
如何打开并编译别人的VS2015 Qt项目
2018-11-20 14:47:43有的是用QtCreator,有的是以插件的形式,放到VS, 我是用后面这种方式,但是往往每个人VS, Qt的安装路径都不相同,我们在打开别人的项目时,就会出现无法编译,Qt版本,路径等不同,那么此时你们的程序可能就无法... -
为Qt生成的可执行程序设置图标
2017-08-04 16:18:29版权声明:本文为博主原创文章... 首先想到的就是看官方文档,Qt有比较完善的文档,而且检索和浏览的方式十分的简单,记得以前的QtSDK版本安装完成之后总是可以在开始菜单栏中找到assistant这个程序,打开就可以浏览了 -
Qt 编译程序时出现The process was ended forcefully,exe crash错误
2019-05-22 12:39:58某天我把程序挪到了另一个虚拟机上,布置好Qt的开发环境,然后打开project文件,项目加载正常,但是debug调试或者运行,直接崩掉。 于是左思右想,才发现是QTDIR和path的变量设置没有做,当程序无法找到相关dll的... -
QT: 如何实现程序的单实例运行检测?
2013-12-27 16:31:11有时候需要保证我们程序只有一个实例,有很多程序都是这样设计,当你打开一个程序之后,再运行它时会提示你“有一个实例正在运行”。 怎么实现呢?下面以QT下的实现举例,很容易要以改成普通的VC实现。 #... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...
-
用Go语言来写区块链(一)
-
Redis源码剖析之内存淘汰策略(Evict)
-
MySQL 性能优化(思路拓展及实操)
-
11. 含k个3的数.cpp
-
leetcode--python--剑指 Offer 11
-
一天学完MySQL数据库
-
vagrant_2.2.5的64位版本
-
vue3从0到1-超详细
-
12. 最大值.cpp
-
04_Redis的String数据类型
-
fritzing.0.9.3b.32.pc.zip
-
MATLAB最邻近插值算法的实现
-
Linux/C/C++ 利用小根堆实现topN
-
工程制图 AutoCAD 2012 从二维到三维
-
C#在什么情况下使用Using
-
【Python-随到随学】FLask第二周
-
JMETER 性能测试基础课程
-
【硬核】一线Python程序员实战经验分享(1)
-
项目经理成长之路
-
【七七八八】coursera python-basis certification