搜档网
当前位置:搜档网 › Qt的pro工程文件语法学习

Qt的pro工程文件语法学习

Qt的pro工程文件语法学习
Qt的pro工程文件语法学习

Qt的.pro工程文件语法学习

标签:proqmake语法

2016-01-15 12:25 171人阅读评论(0) 收藏举报分类:

Qt5(6)

版权声明:本文为博主原创文章,未经博主允许不得转载。

我们编写Qt应用程序时,不管使用Qt Creator还是VS或者Eclipse,不管是Qt Widgets 还是Qt Quick,总会发现有.pro文件,我们称.pro文件为Qt的工程管理文件,它存在的目的是列举工程中包含的源文件。类似于makefile,一个工程中可以包含一个或多个.pro文件。因此对于使用Qt的开发人员来说,熟悉.pro工程文件的语法,懂得阅读和修改.pro文件,将有利于对项目工程的文件组织和管理。

qmake、.pro文件、makefile文件的关系简单来说就是:

qmake工具使用了与平台无关的.pro文件生成与平台相关的makefile文件。

所以虽然本文标题为.pro文件语法学习,实际上应该是qmake的语法学习,但是因为IDE把qmake隐藏起来了,我们接触地更多的是.pro文件,因此还是使用这样的标题。

================================

TARGET变量& TEMPLATE变量& CONFIG变量:

首先我们需要知道工程文件主要分为三种:app(单独的应用程序)、lib(静态或动态库)和subdirs(递归编译)。工程文件的类型可以使用TEMPLATE变量来指定。

TARGET是用来定义应用程序的名字的,而程序的扩展名则由TEMPLATE来定义。例如:TARGET = hello,TEMPLATE = app,则在Linux下会生成hello(无后缀的ELF可执行文件),对应的在Windows下会生成hello.exe。

TEMPLATE和CONFIG共同定义了目标类型,以下是几种常见情况:

?TEMPLATE = app,生成标准程序(注意如果没有TEMPLATE这一项,那么默认工程就是app)。

?TEMPLATE = subdirs,子项目工程模板,可以用它来创建一个能够进入特定目录并且编译子目录里的目标文件。此时除了TEMPLATE = subdirs,还需要指定SUBDIRS 变量,在每个子目录中,qmake会搜寻以目录命名的.pro文件,并且会编译该工程。

?TEMPLATE = lib,生成库文件,若不指定CONFIG变量,则编译为共享库;若CONFIG += staticlib,则编译为静态库;若CONFIG += plugin,则编译为插件(插件总是动态库)。

对于app或者lib工程,以下是较常使用的一些变量:

?TARGET变量:指定可执行文件或库的基本文件名,其中不包含任何的扩展、前缀或版本号。(默认的是当前的目录名)

?CONFIG变量:指定各种用于工程配置和编译的参数

?HEADERS变量:指定工程的C++头文件(.h)

?SOURCES变量:指定工程的C++实现文件(.cpp)

?FORMS变量:指定需要uic处理的由Qt设计师生成的.ui文件

?RESOURCES变量:指定需要rcc处理的.qrc文件(资源文件)

?LEXSOURCES变量:指定工程的lex源文件(.l)

?YACCSOURCES变量:指定工程中的yacc源文件(.y)

?DEFINES变量:指定预定义的C++预处理器符号

?INCLUDEPATH变量:指定C++编译器搜索全局头文件的路径

?LIBS变量:指定工程要链接的库。库既可以通过绝对路径指定,也可以使用源自Unix的-L和-l标识符来指定(例如:-L/usr/local/lib和-ldb_cxx)?QT变量:指定工程所要使用的Qt模块(默认的是core gui,对应于QtCore和QtGui 模块)

?VERSION变量:指定目标库的版本号

?DESTDIR变量:指定生成的可执行文件放置的目录。(默认值是平台相关的,例如在Linux上,值当前目录;在Windows上,则是指debug或release子目录)?DLLDESTDIR变量:指定目标库文件放置的目录(默认与DESTDIR相同)

?OBJECTS_DIR变量:指定目标文件(.o文件)的存放目录

.pro文件中的注释:

注释以井号(#)开头,在行尾处结束。

.pro文件中的一个条目的语法通常具有如下形式:

variable = values

values是字符串的列表,例如:CONFIG = qt release warn_off,是指将列表[“qt”, “release”, “warn_off”] 赋给CONFIG变量,注意!它会覆盖CONFIG变量以前设置的各个值。因此我们通常用+= 操作符来扩展变量的值。如:

CONFIG = qt

CONFIG += release

CONFIG += warn_off

同样,我们也可以用-= 操作符从当前的变量中移除任意的指定值。如:

CONFIG = qt release warn_off

CONFIG -= qt

会使CONFIG变量的值变成[“release”, “warn_off”]。

另外还有= 操作符和~= 操作符。= 操作符在一个变量上添加一个值,但要求被添加的值不在变量的列表上,否则将不做任何事情。例如:

SOURCE *= main.cpp

这一行将把main.cpp文件添加到工程中,只有当它还没有被添加的情况下才会添加。

最后,~= 操作符使用指定的值替换符合正则表达式的值,这是sed的语法。例如:SOURCES ~= s/\.cpp\b/.cxx/

使用.cxx替换SOURCES变量中所有.cpp文件的扩展名。

除了使用qmake定义的标准变量外,我们也可以设置任意变量和值,并且可以使用$$varName或者 $${varName} 语法引用它。例如:

MY_VERSION = 2.0

TARGET = Hello_$${MY_VERSION}

使用 $${PWD} 可以获取当前文件所在的目录路径。

使用内置函数 $$lower() 可以把字符串转换为小写。

而内置函数$$system() 允许我们从外部应用程序中产生字符串,例如想要确认当前的UNIX版本,可以这样写:

OS_VERSION = $$system(uname -r)

然后,可以在条件中使用结果变量,并与contains()合用:

contains(OS_VERSION, SunOS): SOURCES +=mythread_sun.c

有时候可能需要在.pro文件中指定包含空格的文件名。在这种情况下,只需要简单地把文件名用引号括起来即可。

当在不同平台上编译工程时,可能有必要基于平台指定不同的文件或者不同的参数。qmake的条件判断语法是:

condition {

then-case

} else {

else-case

}

condition部分可以是平台名字(例如:win32、unix或者macx),或者更复杂的断言。then-case 和else-case部分使用标准语法为变量赋值。例如:

win32 {

SOURCES += serial_win.cpp

} else {

SOURCES += serial_unix.cpp

}

else分支是可选的。为了方便,当then-case部分仅有一条变量赋值,而且在没有else-case 分支时,qmake也支持单行形式的语法。例如:

macx: SOURCES += serial_mac.cpp

如果有几个工程文件需要共享相同的项,则可以把相同的项提取到单独的文件中,在各自的.pro文件中使用include()语句包含它们。例如:

include(../common.pri)

通常,打算被别的工程文件所包含的工程文件会带有.pri(工程包含)的扩展名。

================================

我们这里提到的一些qmake常用语法,但相对于强大的qmake工具本身提供参数和特性,本文也只是冰山一角,因此如果想对qmake作更多了解,可以参考qmake指南的在线帮助文档。

netcdf4.1.3安装后环境变量设置以跟Qt下使用静态动态库方法新

netcdf4.1.3安装后环境变量设置以及Qt下使用静态动态库方法一.netcdf4.1.3安装后环境变量设置 1.下载netcdf安装包,from: https://www.sodocs.net/doc/e98115534.html,/downloads/netcdf/index.jsp 我下载的是版本4.1.3 2.解压tar -zxvf netcdf-4.1. 3.tar.gz 3. 在解压后的netcdf- 4.1.3所在目录执行: ./configure --disable-dap --disable-netcdf-4 --prefix=/usr/local/netcdf 注意:上面红色的两个选项是他人很多次实验后证明必须的(参考资料1)。--disable-dap的原因是缺少一个‘curl’的lib,--disable-netcdf-4是报错中提出的解决办法,尽管我个人暂时没有搞清楚为什么。不写这两个,在configure的时候就会报错,导致后面make失败。 4. make 5. make install,提示安装成功的同时,还会提醒make check,下一步进行。 6. make check 安装完成后,/usr/local/netcdf/文件夹下存在4个文件,分别为bin,include,lib和share

安装完成后,注意环境变量的设置 打开终端输入sudo ~/.bashrc 在最后添加 export PATH=/home/swh/NSForWoss/DESERT_all_in_one_1.0.0/netcdf/bin:/$P ATH export LD_LIBRARY_PATH=/home/swh/NSForWoss/DESERT_all_in_one_1.0 .0/netcdf/lib:/$ LD_LIBRARY_PATH export DYLD_LIBRARY_PATH=/home/swh/NSForWoss/DESERT_all_in_one _1.0.0/netcdf/lib:/$ DYLD_LIBRARY_PATH

Qt显式调用dll

Qt显式调用C++写的dll 这些天在做一个工程,要用到Qt,所以特别研究了一下Qt显式调用链接库的问题。隐式调用就不那么想用了,个人感觉隐式调用既浪费内存,造成程序启动速度极慢,又容易造成链接错误(本人在ogre中深受链接错误之苦),所以只用了显式调用。以前只试过在MFC 中显式调用dll,在Qt上还没试过。其实细细研究一下,相对于MFC的调用来说,Qt的调用也是大同小异的。在这里分享一下。 首先用VS写一个dll先(名字为QtDllTest)。写dll最大的问题就是解决导出函数重命名问题。其中解决方法是多种多样的。本人只用自己最常用一种——用模块定义文件.def。 第一步,写一个dll,简单写一个测试加法函数的: int add(int a,int b) { return a+b; } 之后添加一个模块定义文件QtDllTest.def: LIBRARY "QtDllTest" EXPORTS add 之后顺利生成dll. 现在可以利用dll函数导出工具DLL Export Viewer查看刚才生成的dll中的导出函数:

发现,导出函数名字没有乱码,说明导出函数正常。现在,就以这个dll为例来试着用Qt调用。 新建一个名为QtDllTestDemo的Qt Application: 默认,下一步 继续下一步:

Finish就行了。反正一切默认就行。 在ui界面中加入一个pushButton(ObjectName:CalButton,Text:Calculate),一个Label 控件(Text:Result),一个lineEdit控件(ObjectName:Result),主要是在点击按钮后调用dll并计算把计算结果显示在文本框中,如下图所示: 为了顺利使用dll,我们要在qtdlltestdemo.cpp开始包含这个东西:#include 下面给pushButton添加click响应事件: void QtDllTestDemo::on_CalButton_clicked() {

Qt开发简介

Qt开发简介 诺基亚开发门户网站:https://www.sodocs.net/doc/e98115534.html,/ (资料例程等)Qt开发平台Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所 用功能。Qt是完全面向对象的, 很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的 Linux桌面环境KDE 的基础。基本上,Qt 同X Window 上的Motif,Openwin,GTK 等图形界面库和 Windows 平台上的MFC,OWL,VCL,ATL 是同类型的东西,但Qt具有优良的跨平台特性、面向对象 、丰富的API、大量的开发文档等优点。QT开发环境Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt 框架的开发人员能迅速上手和操作。Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:一个高级的C++代码编辑器上下文感知帮助系统可视化调试器源代码管理项目和构建管理工具QT for

Symbian 开发环境搭建: https://www.sodocs.net/doc/e98115534.html,/Community/Wiki/Qt_Sym bian_开发环境安装Qt优势面向对象Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 提供了一种称 为signals/slots 的安全类型来替代callback,这使得各个 元件之间的协同工作变得十分简单。丰富的API Qt包括多达250 个以上的C++ 类,还提供基于模板的collections,serialization,file,I/Odevice,directory management,date/time 类。甚至还包括正则表达式的处理功能。支持2D/3D 图形渲染,支持OpenGL 大量的开发文档XML 支持Webkit 引擎的集成,可以实现本地界面与Web内容的无缝集成但是真正使得Qt 在自由软件界的众多Widgets (如Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于Qt 的重量级软件KDE 。我的问题:1:如何用Qt 访问https ?Qt 是支持SSL的,但是由于某些法律和政策因素,QT的开发包里并没有集成openSSL。QT采用两种方式调 用openSSL,默认方式是动态加载openSSL的DLL。 在Windows系统上默认没有openSSL,需要自己安装。可以在这里下载源代码,自己编译 https://www.sodocs.net/doc/e98115534.html,/source/

怎么把qwt添加到qt中使用

标题:如何在QT中运行QWT 作者:胡振凯 日期:2014/8/16 修改ver.1 2014/8/23 运行环境win8.1专业版。 目的:QT中的GUI库不全,使用QWT库可以编程更容易。 从使用QT,到添加QWT库步骤: 1.Download Qt 5.3.1 for Windows 32-bit (MinGW 4.8.2, OpenGL, 735 MB) (Info) , 并安装到D:\Qt中(默认为C盘,但我不喜欢什么都放C里)。 ●下载过VS2013版本,运行nmake时出现错误,找不到stddef.h文 件。 2.修改环境变量的系统变量的path ●打开控制面板,系统,高级设置,环境变量,path ●添加D:\Qt\Qt5.3.1\5.3\mingw482_32\bin,(包含qmake.exe) ●添加D:\Qt\Qt5.3.1\Tools\mingw482_32\bin (包含mingw32- make.exe) 3.Google搜索qwt,进入官网,下载并解压qwt-6.1.0。(下载到哪都无所 谓)。 4.修改qwtconfig.pri文件。修改安装后路径。(我要把qwt安装到d:\Qwt- 6.1.0中,默认是c盘。) ●win32 {QWT_INSTALL_PREFIX = d:/Qwt-$$QWT_VERSION} 5.启动qt命令行程序(类似win dos的那个东东),compile & install qwt文 件。Qwt下载下来的都是源代码,要做成lib和dll文件,就需要编译和安装(拷贝)两个步骤。 ●进入qwt-6.1.0路径,输入命令qmake。在路径下生成makefile文件。 ●输入命令mingw32-make,编译所有cpp文件。 ●输入命令mingw32-make install,按照qwtconfig.pri的文件设置,输 出到安装(拷贝)目录d:/Qwt-6.1.0。 6.设置环境变量的系统变量,添加path,D:\Qwt-6.1.0\lib。很多人把编译好 的文件拷贝到qt库文件夹下。其实,只要设置系统变量的path,编译程序就会查找这个文件夹了,所以不用拷贝来拷贝去的。

用Qt生成dll类库及调用方法

用Qt生成dll类库及调用方法 (2010-08-16 11:01:01) 转载▼ 标签: 教育 .NET2005: 空白工程新建DLL后,将DLL和LIB文件放入需要调用的“指定目录” 项目-》属性->连接器-》常规-》附加库目录->添加“指定目录” 项目-》属性->连接器-》输入-》附加依赖项->添加“LIB文件” 添加头文件到项目中,则DLL可用! VC6.0: 使一个项目编译生成DLL库而不生成可执行文件: 删除main()方法; 将.pro项目文件中的TEMPLATE = app改为TEMPLATE = lib。 然后编译,此时生成的就是.a和.dll的文件。 在另一个项目中调用此DLL: 在项目文件中添加LIB。如添加此行:LIBS += "D:\workspace\MRP_Common\debug\common.dll" (common.dll既是上面生成的DLL);复制dll中类或方法的头文件到该项目中,并在要调用common.dll中类或方法的文件上面include; make,在debug目录中生成可执行文件,然后将dll复制到debug中,运行。 例子: ########################### 生成DLL的工程: ####################### 修改pro文件: TEMPLATE=lib ########################### .h文件 ####################### #ifndef DLLTEST_H #define DLLTEST_H #ifdef Q_WS_WIN #define MY_EXPORT __declspec(dllexport)

Qt 编写多窗口程序

编写多窗口程序 导语 程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。 程序里我们先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。 在这一篇还会涉及到代码里中文字符串显示的问题。 目录 一、添加主窗口 二、代码中的中文显示 三、添加登录对话框 四、使用自定义的对话框类 正文 一、添加主窗口 1.我们打开Qt Creator,新建Qt Gui应用,项目名称设置为“nWindows”,在类信息界面保持基类为QMainWindow,类名为MainWindow,这样将会生成一个主窗口界面。 2.完成项目创建后,打开mainwindow.ui文件进入设计模式,向界面上拖入一个Push Button,然后对其双击并修改显示文本为“按钮”,如下图所示。 3.现在运行程序,发现中文可以正常显示。在设计模式可以对界面进行更改,那么使用代码也可以完成相同的功能,下面就添加代码来更改按钮的显示文本。

二、代码中的中文显示 1.我们点击Qt Creator左侧的“编辑”按钮进入编辑模式,然后双击mainwindow.cpp文件对其进行编辑。在构造函数MainWindow()中添加代码: MainWindow::MainWindow(QWidget*parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->pushButton->setText("新窗口");//将界面上按钮的显示文本更改为“新窗口”} 这里的ui对象就是界面文件对应的类的对象,在mainwindow.h文件中对其进行了定义,我们可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮部件Push Button,在其属性面板上可以看到它的objectName属性的默认值为pushButton,这里就是通过这个属性来获取部件对象的。 我们使用了QPushButton类的setText()函数来设置按钮的显示文本,现在运行程序,效果如下图所示。 2.我们发现,在代码中来设置按钮的中文文本出现了乱码。这个可以有两种方法来解决,一个就是在编写程序时使用英文,当程序完成后使用Qt语言家来翻译整个软件中的显示字符串;还有一种方法就是在代码中设置字符串编码,然后使用函数对要在界面上显示的中文字符串进行编码转换。因为翻译一个软件很麻烦,对于这些小程序,我们希望中文可以立即显示出来,所以下面来讲解第二种方法。 3.设置字符串编码,可以使用QTextCodec类的setCodecForTr()函数,一般的使用方法就是在要进行编码转换之前调用该函数,下面我们在main.cpp文件中添加代码:

Qt 创建List, 添加删除Item

#ifndef LISTWINDOW_H_ #define LISTWINDOW_H_ #include class QPushButton; class QListWidget; class QWidget; class ListWindow : public QDialog { Q_OBJECT public: ListWindow(QWidget *parent = 0); virtual ~ListWindow(); public slots: void moveLeft(); void moveRight(); private: QPushButton *moveLeftButton; QPushButton *moveRightButton; QListWidget *leftList; QListWidget *rightList; }; #endif/**//*LISTWINDOW_H_*/ #include"ListWindow.h" #include #include #include #include #include #include #include #include ListWindow::ListWindow(QWidget *parent) : QDialog(parent) { QGridLayout *gridLayout = new QGridLayout(); gridLayout->addWidget(leftList = new QListWidget(), 0, 0, 3, 1); gridLayout->addWidget(moveLeftButton = new QPushButton("<<"), 0, 1, 1, 1); gridLayout->addWidget(moveRightButton = new QPushButton(">>"), 1, 1, 1, 1); gridLayout->addWidget(rightList = new QListWidget(), 0, 2, 3, 1); QObject::connect(moveLeftButton, SIGNAL(clicked()), this, SLOT(moveLeft())); QObject::connect(moveRightButton, SIGNAL(clicked()), this, SLOT(moveRight())); QStringList items; items << "One" << "Two" << "Three" << "Four" << "Five" << "Sechs" << "Sieben" << "One" << "Two" << "Three" << "Four" << "Five" << "Sechs" << "Sieben"; leftList->addItems(items); this->setLayout(gridLayout); }

qt编写的小游戏

自己用qt动手写的小游戏,大家可以参考帮忙改进下,谢谢!! 游戏内容图片下坠,点击即可得分,未点击到则坠落到底则丢失,得分超过20则赢,丢失超过10则输 文件声音和图片为方便均采用绝对路径; 首先需要创建一个ui文件 文件名为hei.ui 里面拉2个label,一个为分数,一个为丢失数,objectname任意取 在拉2个lineedit,对应上面分别取objectivename为pointEdit和missEdit 在拉2个按钮开始游戏和退出游戏objectivename为startGame和quitGame 再依次创建下面文件,并使用下面代码: Hei.pro文件 SOURCES += \ main.cpp \ hei.cpp \ zujian.cpp \ gameArea.cpp FORMS += \ hei.ui HEADERS += \ hei.h \ zujian.h \ gameArea.h RESOURCES += \ image/ico.qrc RC_FILE=image/app.rc //定义运行图标不需要的话可以删掉 main.cpp 运行主文件 #include #include"hei.h" #include int main(int argc,char*argv[]) { QApplication app(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale());//使中文有效 heiw w; w.show(); return app.exec(); } gameArea.h 设置游戏区域背景类就是一个400*550的矩形框子,使用painter画笔画的,如果想丰富一点,可将该类换成QLabel继承类,然后贴图作为背景,还可以自动更换图片背景。 #ifndef GAMEAREA_H

Qt里添加OpenCV库

Qt里添加OpenCV库 0、新建一个控制台工程 唯一需要注意的是选择编译器,这一定要和你的opencv下载的编译版本一致!我下载的opencv是msvc2015编译的64位所以这里一定要选择相同的! 1、新建的工程点右键,选择添加库,如下图:

2、选择外部库 3、找到Opencv解压目录下的opencv\build\x64\vc15\lib\opencv_world401.lib 添加include 路径opencv\build\include,具体操作看下图: 特别需要注意的是:需要把opencv\build\x64\vc15\lib\bin目录添加到环境变量里Path里

4.点击确定后,工程文件*.pro里会添加如下内容: win32:CONFIG(release,debug|release):LIBS+= -LD:/opencv/build/x64/vc15/lib/-lopencv_world401 else:win32:CONFIG(debug,debug|release):LIBS+= -LD:/opencv/build/x64/vc15/lib/-lopencv_world401d else:unix:LIBS+=-LD:/opencv/build/x64/vc15/lib/-lopencv_world401 INCLUDEPATH+=D:/opencv/build/include DEPENDPATH+=D:/opencv/build/include 5.保存工程,执行qmake,更新工程make文件。这一步很重要,新手往往忘记这一步导致不能使用!!

QT编写一个简单的学生管理系统

嵌入式作业报告 ——学生信息管理系统

学生信息管理系统报告说明书 一.需求分析 利用QT Creator编程环境编写一个简单的学生信息管理系统,与数据库连接,或者直接对.txt文本进行操作,实现对学生信息的增,删,改,查功能。二.总体设计 在窗口刚跳出来时,在左边的QTextEdit对象中显示所有学生的信息,学生的信息被保存在student.txt文件中。右边是几个QPushButton,分别实现增,删,改,查功能。还有一个QLineEdit,用来编辑学生信息。 1.增加学生信息:在行编辑器内输入学生的信息,点击“增加”按钮,该生的信息就会被写入student.txt文件,并且将增加后的所有的学生信息显示在窗口的QTextEdit对象中。 2.删除学生信息:在行编辑器内输入学生的信息,点击“删除”按钮,该生的信息就会从student.txt文件中删除,并且将删除后的所有的学生信息显示在窗口的QTextEdit对象中。 3.修改学生信息:在行编辑器内输入学生的信息,点击“修改”按钮,该生的新的信息就会被写入文件,并且将修改后的所有的学生信息显示在窗口的QTextEdit对象中。 4.查找学生信息:在行编辑器内输入学生的学号,点击“查找”按钮,该生的信息会显示在窗口上。 三.详细设计 若选择直接对文本进行操作,过程比较麻烦。如在进行删除某位学生的信息时,很自然地会想到先找到该生在文件中的位置,再将其后的所有学生信息都向前移动,看起来似乎很简单,但是在文件里进行这些操作时还是要费一些功夫的。经过在网上查资料,得到了一种算法,就是先把文件里的每位学生的信息读出来,放到一个str[]数组中,再通过比较,找到要删除学生所在的数组元素的下标,之后仅仅是对数组内容进行更改,最后再将新的数组元素写入文件中,再通过读文件将信息显示在窗口。下面这段代码是我自己认为在这次作业中取得较

QT5编写和调用DLL动态库的终极实践

QT5编写和调用DLL动态库的终极实践如今,使用QT编程的人越来越多,但由于缺乏相关的中文文档,使得大家在学习的过程中偶有碰壁,网上的大多也有疏漏税,即使照着做也未必能成功。今天给大家讲讲QT5.02编写和调用DLL动态库的编程实践,按照以下方法可以确保你对DLL编写和调用少走变路。步聚一: 编写所需的DLL文件,如下图创建C++库文件工程。类型选择此处选的是动态库。工程名dll,生成的类名为Dll。

如下图,在dll.h 头文件中加入函数SHOW。 在dll.cp中编写该函数的实现。此处我让函数打开一个窗口并在应用程序输出中输出“OK”字符。顺便讲一下在DLL编写时如何加入容积资源文件。依次点击“文件”菜单选择“新建文件或项目”然后如图选择“QT设计师界面类”

生成的文件及类名如下图: #include"dll.h"

#include"qdebug.h" #include"dialog.h" Dll::Dll() { } void Dll::show(){ Dialog*wi=new Dialog(); wi->show(); qDebug()<<"ok"; } 到这里,DLL文件的编写结束。最后一步就是构建该程。在该程名字上点鼠标右键,再选择构建。 接下来编写测试工程,类型为QT GUI应用。工程名字为PO,

在po.pro文件中加入LIBS+=..\dll.DLL,完整代码如下: #------------------------------------------------- # #Project created by QtCreator2013-08-06T10:19:12 #LIBS+="D:\c\po\dll.dll" #------------------------------------------------- QT+=core gui greaterThan(QT_MAJOR_VERSION,4):QT+=widgets TARGET=po TEMPLATE=app LIBS+=..\dll.DLL SOURCES+=main.cpp\ mainwindow.cpp HEADERS+=mainwindow.h\ dll.h\ dll_global.h FORMS+=mainwindow.ui 在mainwindo.ui加一个按纽,并添加单击槽函数。完整代码如下: #include"mainwindow.h"

QT实现文本编辑器

一用Qt4实现的文本编辑器 1. 新建,打开,保存文件 2.基本的文本编辑功能(复制,粘贴,剪切等) 3.不同风格 4.改变文字的大小,颜色,字体等 界面如下: 二工程文件 1. /* src.pro*/ TEMPLATE = app CONFIG += warn_on \ thread \ qt \ qtestlib TARGET = texteditor DESTDIR = ../bin SOURCES += CMainWindow.cpp \ MainWindow.cpp \ CFindDialog.cpp

HEADERS += CFindDialog.h \ CMainWindow.h \ ui_finddialog.h \ ui_MainWindow.h FORMS += FindDialog.ui \ MainWindow.ui RESOURCES += MainWindow.qrc QT += qt3support 2. /*CMainWindow.cpp*/ #include "CMainWindow.h" #include "CFindDialog.h" #include #include CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); iniStatusBar(); iniConnect(); fontColorAct = new QAction(QPixmap(32, 32), tr("改变字体颜色"), this); styleToolBar = new QToolBar(this); styleToolBar->setObjectName(QString::fromUtf8("styleToolBar")); styleToolBar->setOrientation(Qt::Horizontal); this->addToolBar(Qt::TopToolBarArea, styleToolBar); menu_2->addAction(fontColorAct); styleToolBar->addAction(fontColorAct); show(); connect(fontColorAct, SIGNAL(triggered()), this, SLOT(changeColor())); } void CMainWindow::iniConnect() { connect(textEdit, SIGNAL(cursorPositionChanged()), this, SLOT(doCursorChanged())); connect(textEdit->document(), SIGNAL(contentsChanged()),

QT问题集锦-从学习Qt遇到地各种问题

第一篇初级问题 1 用Qt4.8.5打不开冯工柏菲软件 问题描述:运行环境为Qt4.8.5 + QtCreator3.0.0+VS2010专业版 + Debuging Tools for Windows(x86),用Creator无法打开项目文件,截图如下: 弹出错误:Cannot read E:/PROJECT/Zhou-0410/testToolbar.pro: Unexpected UTF-8 BOM 原因分析:未知 解决方法: 1 安装VS2010SP1,未解决 2 安装VS-Add,未解决 3 使用Creator2.6解决 2 编译失败,系统找不到指定路径 问题描述:见下图

原因分析: 1)可能:添加VS编译器环境变量,在PATH中添加VS 中NMAKE路径 2)确定:Creator或编译器无法识别&符号,即路径原文件名为R&T中含有非法字符,无法准确识别路径 3)默认的环境变量已经有了NMAKE路径 解决方法:把路径中非法字符删除即可 3 编译出现乱码,Parse Error 原因分析:未知,应该是非法字符导致。 4 无法解析的外部符号 原因分析:声明的函数,未实现,或在未实现它的情况下调用了它 解决方法:实现后再调用 5 中文乱码 问题描述:见图

解决方法:转换成utf8格式 6 控件背景图片添加 问题描述:按照相对路径添加背景图片不显示解决方法: 1)相对路径起始点为构建目录,如图

2)添加资源文件,把背景图片放到资源文件中,再通过控件属性,指定资源文件中的背景图片即可。 7 昨天能启动运行成功,今天说异常结束,运行不了 原因分析:可能是昨天在windows、system32里面添加了qtcore.dll等文件导致 解决方法:删除之后就可以运行了,但具体删除哪个,待定 8 通过控件,查找操作函数? 9 修改控件名称时,弹出外部链接错误 解决方法:修改名称后,通常有以下步骤 1)在头文件中删除对应槽; 2)修改槽动作名称或重新生成槽动作,把之前代码拷贝到新槽动作中。 10 Qt数据类型转换 1)int 转 QString int a=10;

QT界面开发

1Qt4界面开发 1.1Q t历史 Qt是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API 和一个丰富的类库,以及用于GUI开发和国际化的集成工具,另外它支持Java?和C++开发。Qt让企业无须重新编写源代码,便可以构建运行在不同桌面操作系统和嵌入式设备上的软件应用程序。 Qt框架最早可公开获取是在1995年5月。最初是由Haavard Nord(TrollTech公司的首席执行官)和Eirik Chambe-Eng(TrollTech公司的董事会主席)。Haavard和Eirik 最早在特隆赫姆的挪威技术学院相遇,在那里他们双双获得了计算机科学硕士学位。 早在1991年,Haavard 就开始写一些最终成为Qt的类,并和 Eirik合力设计。在接下来的一年,Eirik提出了“信号和槽”的思想,一个现在已经被一些其他套装工具包含简单但功能强大的GUI编程范式。Haavard 接受了这一思想并手工生成了这一思想的代码实现。到1993年,Haavard和Eirik已经完成了Qt的第一个图形内核的开发并能用它来实现一些他们所需的物件。在这一年的年末,Haavard建议他们一起去经商,创建一个“世上最好的C++ GUI框架”。 字母“Q”被选为类的前缀是因为这个字母在Haavard的Emacs字体中看起来很漂亮。受到Xt(the X toolkit)的启发,字母“t”被追加来表示“toolkit”。公司在1994年5月4日成立,起初被命名为“Quasar Technologies”,之后被改名为“Troll Tech”,今天则被称为奇趣科技(Trolltech)。 1995年5月20日,Qt 0.90被上传到https://www.sodocs.net/doc/e98115534.html,。六天后,这一发布在comp.os.linux.announce被宣布。这是Qt的第一个公共发行版。Qt可以被用在Windows 和Unix开发中,在两个系统中提供相同的API。Qt从一开始就可以在两种许可协议下获取:一个是商业开发中需要的商业许可协议,一个用于开源开发的自由软件版。 1996年3月,欧洲航天局成为Qt的第一个客户,一下买了十个Qt商业许可。Qt 0.97在同年的5月底发布,1996年9月24日,Qt 1.0发布。到了同年年底,Qt到达了版本1.1;拥有8个客户,每一个都在不同的国家,他们购买了18个商业许可。 Qt 1.2 在1997年4月发布。Matthias Ettrich利用Qt构建KDE的决定帮助Qt成为Linux C++ GUI 开发的实际标准,1997年9月Qt 1.3发布。 1998年9月,Qt 1的最后一个主要发行版1.40发布。Qt 2.0于1999年7月发布。Qt 2有了一个新的开源许可协议,发布许可协议(QPL),遵守开源的定义。1999年8月,Qt赢得了LinuxWorld的“最佳开发库/工具”大奖。 2000年奇趣科技发布了Qtopia核心(后来成为Qt/Embedded)。它被设计用来运行在嵌入式Linux设备上并提供了自己的窗口系统作为X11的一个轻量级代替。现在Qt/X11和Qtopia核心都可以通过GNU通用许可(GPL)获取。到2000年年底,奇趣科技成立了Trolltech Inc.(USA)并且发布了Qtopia的第一个版本,一个移动电话和PDAs应用程序平台。Qtopia赢得了2001和2002年LinuxWorld的“最佳嵌入式 Linux 解决方案”大奖,

基于Qt5的闹钟实现代码

本程序基于QWidget实现,可以动态显示钟表,并且可以添加铃声 头文件widget.h代码如下: #ifndef WIDGET_H #define WIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); signals: void isCurrentTime(); private: Ui::Widget *ui; void init(); void layout(); void con();

QLCDNumber *lcdNumber; QLabel *label; QTimeEdit *timeEdit; QPushButton *button; QTimer *timer; QTimer *uptimer; QTimer *dtimer; QTimer *itimer; QRect rect; int x; int y; double du; QSystemTrayIcon *trayIcon; QAction *restoreAct; QAction *quitAct; QMenu *trayIconMenu; private slots: void clockChange(); void dialogUp(); void mini(); void down(); void comToCur(); protected: void closeEvent(QCloseEvent *e); }; #endif // WIDGET_H 源文件widget.cpp代码如下: #include "widget.h" #include "ui_widget.h" #include #include #include Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); init(); layout(); con();

VS使用QT5.2.1动态库的方法

使用QT创建项目需更改VS2013配置,操作步骤如下: 1、打开VS2013,点击菜单栏中“QT5”->选择“Qt Option”,弹出如下窗口: 2、添加QT静态库文件路径,并选择对应版本。 2、单击“QT5”->选择“Qt Project ”,弹出如下窗口,选择Version为静态库版本。

3、右键QT项目,选择“属性” 弹出如下窗口: 如图上红框所示,配置该选项。 4、右键QT项目,选择“属性”,弹出如下窗口:

如图红框所示配置信息,【附加依赖项】配置为: PocoFoundationd.lib;AfcFrameworkd.lib;DevBased.lib;imm32.lib;winmm.lib;Ws2_32.lib;open gl32.lib;qwindowsd.lib;Qt5PlatformSupportd.lib;wsock32.lib;qtmaind.lib;Qt5Cored.lib;Qt5Gu id.lib;Qt5Widgetsd.lib;%(AdditionalDependencies) 5、右键QT项目,选择“属性”,弹出如下窗口: 如图红框所示配置信息,【附加库目录】配置为: $(QTDIR)\plugins\platforms;$(QTDIR)\lib;%(AdditionalLibraryDirectories)

6、QT项目启动cpp中加入如下: 如图红框代码: #include #include"Poco/Foundation.h" #ifdef POCO_OS_FAMILY_WINDOWS Q_IMPORT_PLUGIN( QWindowsIntegrationPlugin ); #endif

基于Qt的TCPIP网络通信实现

基于tcp/ip网络通信的实现

摘要 如今随着计算机网络的不断发展,生活和工作环境的不断变化,以网络为重心的信息服务和通信服务受到各行各业的重视。而在当今各种聊天工具竟然日趋激烈的时代,在服务,技术等各个环节都做到更好的同时,如何把现代的网络应用技术与通信技术结合起来,让世界各地的人方便交流。 本课题的最终目的是基于Qt的TCP/IP协议的进行客户端和服务端之间进行聊天。本文中就该系统的设计思想、实现方法以及所采用的技术进行了系统的阐述,本文分为以下几个部分: 前言部分概括客户端和服务端之间通信的意义。 第一章介绍了课题实现的可行性研究。 第二章介绍了客户端和服务端具体通信的过程。 第三章是本文的核心部分,着重介绍和总结了本系统的实现思想、方法以及具体实现方案; 第四章对本聊天软件进行了总结和展望; 关键词:QT、tcp SOCKET、客户端服务端

第一章客户端与服务端通信的可行 性 1.1 课题的研究目标 本课题的最终目的是通过Qt Creator开发工具设计客户端和服务端的界面,进一步让客户端和服务端之间进行通信。 1.2 设计思路的分析和可行性 本如软件采用服务器和客户端的形式。服务器负责监听客户端和接收客户端发送过来的信息,并在显示在界面上。客户端则向服务端发送信息,在本地呈现的同时,通过网络实时发往服务器。用户在服务器器上也可以看见客户端发送的消息,并获取最新客户端发送的消息。 网络编程技术的成熟和界面设计技术使得客户端与服务端通信的设计成为可能,而且此软件同过设置IP是聊天通信更为方便。 1.3 开发环境和开发技术的选用 我们选用的开发环境是Qt Creator开发工具,Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言

Qt加载dll

QT加载第三方库 一、(动态)显示加载(只需要.dll,不需要.lib/.h) A)将.dll放到编译目录下,例如: build-TestLoadDll-Desktop_Qt_5_5_0_MinGW_32bit-Debug B)包含头文件. #include C)在Windows下程序显示调用dll的步骤分为三步(三个函数):LoadLibrary()、GetProcAdress()、FreeLibrary() 第一步:QLibrary mylib("Trf32.dll"); //声明所用到的dll文件 第二步:判断dll是否加载成功if(mylib.load()) 第三步:mylib.resolve("DC_init_comm") //援引DC_init_comm()函数 第四步:卸载库mylib.unload(); void MainWindow::on_pushButton_clicked() //开启设备 { typedef long(*Fun)(const char*,unsigned long); QLibrary mylib("Trf32.dll");//声明所用到的dll文件 long result; if(mylib.load())//判断是否正确加载 { QMessageBox::information(NULL,"OK","DLL load is OK!"); Fun open=(Fun)mylib.resolve("DC_init_comm");//援引DC_init_comm()函数 if(open) //是否成功连接上DC_init_comm()函数 { //QMessageBox::information(NULL,"OK","Link to Function is OK!"); result=open("COM1",115200); //函数指针调用dll中的DC_init_comm()函数 QMessageBox::information(NULL,"OK",QString::number(result,10)); //如果返回数小于0则通讯失败这里返回-1 mylib.unload();//卸载库 } else QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!"); } else QMessageBox::information(NULL,"NO","DLL is not loaded!"); } Generalreader.dll

相关主题