新人求教,急.qt4.8.6无法编译

新人求教,急.qt4.8.6无法编译,第1张

认真核对 *** 作步骤:

1、修改环境变量工具推荐:Rapid Environment Editor。

修改前请先备份当前的环境变量。然后:

(1)检查系统变量path,删除有关mingw其他版本等信息,以免与后续的mingw32-make冲突。

(2)检查用户变量INCLUDE、LIB、PATH、MSDevDir和MSVCDir,删除有关\Microsoft Visual Studio\VC98的信息,因为它们会与后续的mingw32-make冲突,导致编译出错。

2、在电脑上安装mingw编译器,假设路径安装在C:\Qt\mingw32。将C:\Qt\mingw32\bin添加进环境变量path,打开DOS命令行输入gcc --version和g++ --version和mingw32-make --version验证编译器安装成功。我用的MinGW版本是V4.8.2,

3、解压qt-everywhere-opensource-src-4.8.6.zip并进入目录。例如:D:\qt-everywhere-opensource-src-4.8.6\

4、依次执行以下DOS命令:

(1)configure -debug-and-release -opensource -prefix "D:\Qt4.8.6" -platform win32-g++ -nomake demos -nomake examples

常见的使用选项说明:

-debug-and-release编译debug和release版

-opensource 选择开源协议并确认

-platform win32-g++ 使用mingw编译

-prefix "D:\Qt4.8.6" 指定编译结果目录,如果未指定则默认当前

-shared 创建和使用共享Qt库

-static 创建和使用静态Qt库

-nomake demos -nomake examples 不编译例程

-nomake tests 不编译tests

-skip qtwebkit 忽略qtwebkit,因为编译它特别消耗时间

-mp 使用多核优化编译

(2)mingw32-make

(3)mingw32-make install

5、编译完成后,把C:\Qt\mingw32\bin\路径下的三个文件libgcc_s_dw2-1.dll、libstdc++-6.dll和libwinpthread-1.dll拷贝到D:\qt-everywhere-opensource-src-4.8.6\bin\。另外,也请把步骤1备份的环境变量还原。

6、修改Qt安装路径

最初编译时选择的路径是D:\Qt4.8.6\。如果想将它复制到其他盘符,并且改名,例如:C:\Qt\4.8.6_MinGW。这样一来会有问题吗?是的,会有问题,因为Qt有绝对路径依赖症。改名后C:\Qt\4.8.6_MinGW\bin\的exe执行程序都会出问题,要么程序打不开,要么多国语言发生异常。用记事本打开C:\Qt\4.8.6_MinGW\bin\qmake.exe,查找关键字“qt_prfxpath”,可以看到里面含有原始的安装路径。我们不可以手动去修改qmake.exe,真正有效的解决方法是:

在C:\Qt\4.8.6_MinGW\bin\路径下创建一个qt.conf文件,内容为

[paths]

Prefix = C:/Qt/4.8.6_MinGW

请注意:qt.conf文件必须是ANSI格式,并且Prefix的斜杠风格采取的是Linux的,而非Windows,否则会失效。或者使用"Prefix = .. ",如此一来,任意路径有效。

QT线程是独立的类:

在QT中添加C++类,头文件引用#include <QThread>类公开,这样写:

class XXXX:public QThread,类里面申明Q_OBJECT,直接写在里面。signals: XXX()这是你的订阅事件名。private:void run()这是run函数;public: int cona=3这是变量,一定要public。

cpp文件里引用头文件,run函数里面写方法:

void XXXX::run()

{

do

{

msleep(cona)

emit connec()

}while(true)

}

上面就是线程类了。现在我们在窗体中应用,先在头文件申明

头文件private: XXXX *thread1XXXX *thread2

构造函数中初始化他们

thread1=new XXXX()

thread1->cona=3

QObject::connect(thread1,SIGNAL(connec()),this,SLOT(XXX信号1()))

thread2=new XXXX()

thread2->cona=4

QObject::connect(thread2,SIGNAL(connec()),this,SLOT(XXX信号2()))

XXX信号1()是读A数据,XXX信号2()读B数据。

按钮1的信号槽里写方法同时进行每3秒读A、没4秒读B

thread1->start()

thread2->start()

要结束谁就用 xxxx->terminate()

看明白没?QT可不同与C++,你不熟悉编程环境,是很难理解的。

一、建立并生成动态链接库

1

我们首先在磁盘的某个位置建立一个名为DllDemo的文件夹。

打开QtCreator,新建工程,我们选择Library,C++库,然后就是choose。

怎样在Qt中建立使用动态链接库

2

然后在d出的C++库对话框我们默认类型共享库,名称为MyDll。路径就是我们刚才建立的DllDemo文件夹。然后,一直下一步,直到点击完成。

怎样在Qt中建立使用动态链接库

3

我们来看看程序结构,以及pro文件内容。

我可以看到系统自动生成了一个mydll_global.h的文件。

pro内也自动生成了一些内容。可以看到TEMPLATE = lib,而不是我平时的TEMPLATE = app。

怎样在Qt中建立使用动态链接库

4

再来看看mydll_global.h的内容。

可以看到系统自动定义了两个宏。用于声明哪些函数是需要我们导出的。

怎样在Qt中建立使用动态链接库

5

下面我们来给我们的代码添加点内容,以便于我们待会使用。

首先我们在mydll.h中添加几行代码,如下图。

注意:extern "C" MYDLLSHARED_EXPORT必须要有。

怎样在Qt中建立使用动态链接库

6

再来看看mydll.cpp中的实现代码,都比较简单。

怎样在Qt中建立使用动态链接库

7

代码编写完毕后,我们直接构建就行了。然后就可以看到我们生成的dll了。

怎样在Qt中建立使用动态链接库

END

二、测试生成的DLL

新建一个基于Qt的控制台应用程序,名称为DllTest。依然放置在我们的DllDemo的目录下。

怎样在Qt中建立使用动态链接库

建好了以后,就可以在main.cpp写代码了。我们通过QLibrary类来加载dll。

因为要获得类对象的实例,所以我们需要将mydll.h包含进来。

要注意的是,我没有对函数是否成功获取做检测。

来看看我们的代码:

怎样在Qt中建立使用动态链接库

代码写完后就可以构建程序了。不过要运行程序,我们还需要将刚才生成的dll拷贝到程序的同级目录。

怎样在Qt中建立使用动态链接库

在IDE中运行程序,因为我生成的是debug版的程序,相关的环境变量未设置,无法独立运行。

可以看到我们的dll工作的很好,程序运行正常。

怎样在Qt中建立使用动态链接库

END

三、善用Assistant

1

最后我们来看看Assistant中关于QLibrary的描述。比较费解的是,Assistant中并没有对创建共享库做详细的说明,估计是这个太简单或资料太多了吧。

怎样在Qt中建立使用动态链接库


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11543340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存