185
+50
|
Maybe, instead of installing additional software, you can use what the system has to this end:
|
COLOSSEO
Oct 14, 2016
how to mount a ISO file in linux
Sep 23, 2016
qt中pro详解
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:
1. 注释
从“#”开始,到这一行结束。
2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:
TEMPLATE = app
A> app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
B> lib - 建立一个库的makefile。
C> vcapp - 建立一个应用程序的VisualStudio项目文件。
D> vclib - 建立一个库的VisualStudio项目文件。
E> subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
TEMPLATE
A> app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
B> lib - 建立一个库的makefile。
C> vcapp - 建立一个应用程序的VisualStudio项目文件。
D> vclib - 建立一个库的VisualStudio项目文件。
E> subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
#指定生成的应用程序放置的目录DESTDIR
#指定生成的应用程序名
TARGET = pksystem
TARGET
#配置信息
CONFIG用来告诉qmake关于应用程序的配置信息。
CONFIG用来告诉qmake关于应用程序的配置信息。
在这里使用“+=”,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“=”那样替换已经指定的所有选项是更安全的。
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B> warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用debug来替换release
A> qt部分告诉qmake这个应用程序是使用Qt来连编的。这也就是说qmake在连接和为编译添加所需的包含路径的时候会考虑到Qt库的。
B> warn_on部分告诉qmake要把编译器设置为输出警告信息的。
C> release部分告诉qmake应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用debug来替换release
#指定uic命令将.ui文件转化成ui_*.h文件的存放的目录
UI_DIR
#指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录RCC_DIR += ../tmp
#指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录MOC_DIR += ../tmp
#指定目标文件(obj)的存放目录OBJECTS_DIR += ../tmp
#程序编译时依赖的相关路径
DEPENDPATH += . forms include qrc sources
DEPENDPATH
#头文件包含路径INCLUDEPATH += .
#qmake时产生的信息,【$${a}读取变量a的字符串】,【$$(PATH)读取环境变量PATH】#message($$(PATH))
#源文件编码方式
CODECFORSRC = GBK
CODECFORSRC
#工程中包含的头文件
HEADERS += include/painter.h#工程中包含的.ui设计文件FORMS += forms/painter.ui#工程中包含的源文件SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的资源文件
RESOURCES += qrc/painter.qrc
HEADERS
#工程中包含的资源文件
RESOURCES
LIBS += -L folderPath //引入的lib文件的路径 -L:引入路径
Release:LIBS += -L folderPath // release 版引入的lib文件路径
Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路径
DEFINES += XX_XX_XXX //定义编译选项,在.h文件中就可以使用:#ifdefine xx_xx_xxx
RC_FILE = xxx.icns
7. 平台相关性处理
我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:
我们在这里需要做的是根据qmake所运行的平台来使用相应的作用域来进行处理。为Windows平台添加的依赖平台的文件的简单的作用域看起来就像这样:
win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
SOURCES += hello_win.cpp
}
====================================================================================================================
当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
Makefile可以像这样由“.pro”文件生成:
对于VisualStudio的用户,qmake也可以生成“.dsp”文件,例如:
++++++++++++++++++++++++一个PRO文件实例++++++++++++++++++++++++++++++++++++++++
TEMPLATE = app #模块配置
LANGUAGE = C++ #C++语言
LANGUAGE
CONFIG += qt warn_on debug release
#引入的lib文件,用于引入动态链接库
LIBS += qaxcontainer.lib
LIBS
#头文件包含路径
INCLUDEPATH += ..\..\qtcompnent\qtchklisten\inc ..\..\qtcompnent\qtclearfile\inc ../../validator\inc\validerrcode ../../qtcompnent/qtdir/inc ../inc ../../utillib/inc/xmlapi ../../utillib/inc/util ../../xercesc ../../qtcompnent/qteditor/inc ../../qtcompnent/qtfunreview/inc ../../qtcompnent/qttable/inc ../../qtcompnent/qtversion/inc ../../qtcompnent/qtini/inc ../../icdtool/icdservices/inc ../../icdtool/dataset/inc ../../icdtool/doi/inc ../../icdtool/reportcontrol/inc ../../icdtool/GSEconctrol/inc ../../icdtool/inputs/inc ../../icdtool/SMVconctrol/inc ../../icdtool/logcontrol/inc ../../scdpreview/inc/scdpreviewtoollib ../../scdpreview/form ../../icdtool/sclcontrol/inc ../../icdtool/log/inc ../../icdtool/settingcontrol/inc ../../qtcompnent\qteditor\inc ../../qtcompnent\qttreeview\inc ../../qtcompnent\qttabwidget\inc ../../communication/inc ../../qtcompnent/qtabout/inc ../iedmanage/inc ../ldmanage/inc ../foriecrun/inc ../../qtcompnent\validset\inc
INCLUDEPATH
#工程中包含的头文件
HEADERS += ../inc/exportstable.h \
../inc/maintabwidget.h \
../inc/outputtab.h \
../inc/strutil.h \
../inc/treeeditview.h \
../inc/MainForm.h \
../inc/recenfileini.h \
../inc/ExportCIDFunction.h
HEADERS
#工程中包含的源文件
SOURCES += ../src/main.cpp \
../src/exportstable.cpp \
../src/maintabwidget.cpp \
../src/outputtab.cpp \
../src/treeeditview.cpp \
../src/MainForm.cpp \
../src/recenfileini.cpp \
../src/ExportCIDFunction.cpp
SOURCES
#工程中包含的.ui设计文件
FORMS = ../form/scdmainform.ui \
../form/exportiedform.ui \
../form/Exportsedform.ui \
../form/Importsedform.ui \
../form/formiminputs.ui
FORMS
#图像文件
IMAGES = images/substation.png \
images/communication.png \
images/autocom.png \
images/reportcfg.png \
images/comcfg.png \
images/filetrans.png \
images/review.png \
images/setting.png
#工程中包含的资源文件
RESOURCES = Scintilla.qrc
RESOURCES
#CONFIG -= release
CONFIG -= debug
CONFIG -= debug
RC_FILE = scdtool.rc
BINLIB = ../../bin ../../xercesc/lib
UI_HEADERS_DIR = ../inc # .ui文件转会为**.h 存放的目录
UI_SOURCES_DIR = ../src # .ui文件转会为**.cpp 存放的目录
QMAKE_LIBDIR = $${BINLIB}
UI_SOURCES_DIR = ../src
QMAKE_LIBDIR = $${BINLIB}
release {
TARGET = scdtool #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目标文件(obj)的存放目录
}
debug {
TARGET = scdtool_d #指定生成的应用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目标文件(obj)的存放目录
}
TARGET = scdtool
OBJECTS_DIR = ../../obj/scdtool/release #指定目标文件(obj)的存放目录
}
debug {
TARGET = scdtool_d
OBJECTS_DIR = ../../obj/scdtool/debug #指定目标文件(obj)的存放目录
}
MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin #指定生成的应用程序放置的目录
DESTDIR = ../../bin
1.简介: qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。是qt工具包的一部分.在Unixstdio.h>
int main(int argc, char** argv)
{
printf("Hello, world!\n");
return 0;
}
创建qmake需要的项目文件(hello.pro),
SOURCES = hello.cpp
CONFIG += qt warn_on release
Makefile可以像这样由".pro"文件生成:
qmake -o Makefile hello.pro
现在你的目录下已经产生了一个 Makefile 文件,输入"make" 指令就可以开始编译 hello.c 成执行文件,执行 ./hello 和 world 打声招呼吧!打开这个Makefile文件看看,是不是很专业啊!
4.高级操作技巧
当然,在实际使用过程中,我们的工程不可能象这个程序这样简单的,它可能有多个目录,多个头文件,多个源文件,需要链接器它不同的链接库等等情况。别急,让我和你慢慢道来。这些都是非常容易用qmake来实现的。我们从一个更加复杂的项目文件为例和你详细的讲诉qmake的高级技巧:
项目文件示例:
SOURCES += myqt.cpp
SOURCES += main.cpp
HEADERS += myqt.h
FORMS += xsimform.ui
TEMPLATE = lib
CONFIG += debug warn_on qt thread x11 plugin
TARGET = ../bin/panel_qt
INCLUDEPATH = ../../../../xsim ../../../../xsim/IMdkit
DEFINES = BDB_VERSION4 OS_LINUX
从这个文件可以知道,SOURCES变量指向项目中的源文件,当项目中有多个源文件时,我们需对项目中的每一个源文件都这样做,直到结束:
int main(int argc, char** argv)
{
printf("Hello, world!\n");
return 0;
}
创建qmake需要的项目文件(hello.pro),
SOURCES = hello.cpp
CONFIG += qt warn_on release
Makefile可以像这样由".pro"文件生成:
qmake -o Makefile hello.pro
现在你的目录下已经产生了一个 Makefile 文件,输入"make" 指令就可以开始编译 hello.c 成执行文件,执行 ./hello 和 world 打声招呼吧!打开这个Makefile文件看看,是不是很专业啊!
4.高级操作技巧
当然,在实际使用过程中,我们的工程不可能象这个程序这样简单的,它可能有多个目录,多个头文件,多个源文件,需要链接器它不同的链接库等等情况。别急,让我和你慢慢道来。这些都是非常容易用qmake来实现的。我们从一个更加复杂的项目文件为例和你详细的讲诉qmake的高级技巧:
项目文件示例:
SOURCES += myqt.cpp
SOURCES += main.cpp
HEADERS += myqt.h
FORMS += xsimform.ui
TEMPLATE = lib
CONFIG += debug warn_on qt thread x11 plugin
TARGET = ../bin/panel_qt
INCLUDEPATH = ../../../../xsim ../../../../xsim/IMdkit
DEFINES = BDB_VERSION4 OS_LINUX
从这个文件可以知道,SOURCES变量指向项目中的源文件,当项目中有多个源文件时,我们需对项目中的每一个源文件都这样做,直到结束:
SOURCES += hello.cpp
SOURCES += main.cpp
当然,如果你喜欢使用像Make一样风格的语法,你也可以写成这样,一行写一个源文件,并用反斜线结尾,然后再起新的一行:
SOURCES = hello.cpp main.cpp
HEADERS变量指向项目中的头文件,多个头文件的时候,和多个源文件的解决方法一致。
FORMS变量指向项目中使用到的窗体文件(qtdesign设计的.ui文件),qmake也注意了Qt的特殊需求,可以自动的包含moc和uic的连编规则。没有的话或者非qt程序可以不写。
TEMPLATE变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:
app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
lib - 建立一个链接库的makefile。
vcapp - 建立一个应用程序的Visual Studio项目文件。
vclib - 建立一个库的Visual Studio项目文件。
subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的mkefile。
CONFIG变量变量指定了编译器所要使用的选项和所需要被连接的库。配置变量中可以添加任何东西,但只有下面这些选项可以被qmake识别。
下面这些选项控制着使用哪些编译器标志:
release - 应用程序将以release模式连编。如果"debug"被指定,它将被忽略。
debug - 应用程序将以debug模式连编。
warn_on - 编译器会输出尽可能多的警告信息。如果"warn_off"被指定,它将被忽略。
warn_off - 编译器会输出尽可能少的警告信息。
下面这些选项定义了所要连编的库/应用程序的类型:
qt - 应用程序是一个Qt应用程序,并且Qt库将会被连接。
thread - 应用程序是一个多线程应用程序。
x11 - 应用程序是一个X11应用程序或库。
windows - 只用于"app"模板:应用程序是一个Windows下的窗口应用程序。
console - 只用于"app"模板:应用程序是一个Windows下的控制台应用程序。
dll - 只用于"lib"模板:库是一个共享库(dll)。
staticlib - 只用于"lib"模板:库是一个静态库。
plugin - 只用于"lib"模板:库是一个插件,这将会使dll选项生效。
TARGET变量指定生成的二进制代码的路径和文件名,如果建立的是一个链接库的话,它会在文件名前面自动加上"lib"和在最后自动加上".so".
我们在使用过程中可能会使用到另外的一些函数库,链接库等。函数库的头文件指定使用INCLUDEPATH变量,其它链接库的指定可以通过LIBS 变量来指定,例LIBS += -lmath -L/usr/local/lib
DEFINES变量的指定就如同make的-D选项一样。
主要包含两个步骤:
1.在pro中加入条件编译宏的定义,并用contains函数判断是否定义这个宏,在其中做特殊处理
DEFINES += CLIENT
contains( DEFINES, CLIENT ) {
# VERSION contains 'CLIENT'
message( "Configuring for CLIENT build..." )
#must be last
ICON = $${TARGET}.png
DESKTOP_FILE = $${TARGET}.desktop
include(../install.pri)
}
2.在c++程序中利用ifdef 控制包含的代码
#ifdef CLIENT
#else
#endif
1.在pro中加入条件编译宏的定义,并用contains函数判断是否定义这个宏,在其中做特殊处理
DEFINES += CLIENT
contains( DEFINES, CLIENT ) {
# VERSION contains 'CLIENT'
message( "Configuring for CLIENT build..." )
#must be last
ICON = $${TARGET}.png
DESKTOP_FILE = $${TARGET}.desktop
include(../install.pri)
}
2.在c++程序中利用ifdef 控制包含的代码
#ifdef CLIENT
#else
#endif
结束语
Autoconf 和 Automake 功能十分强大,但对于普通用户来说,太过复杂。qmake方便、简单、快捷,是一个轻量级的makefile生成工具,虽然它是qt工具包的一部分,但它也完全可以用来进行其它程序makefile文件的生成,对于大多数人来说,它已经是非常的够用了。你也可以从qt提供的许多现存的源程序中找到相关的.pro项目文件,它们是学习qmake 更多技巧的最佳范例。
Aug 3, 2016
QT resource
版权声明:进步始于交流,收获源于分享!纯正开源之美,有趣、好玩、靠谱。。。作者:一去丶二三里
简述
发福利了、发福利了、发福利了,重要的事情说三遍。。。
为了方便更多Qter了解、学习Qt,现将相关资源进行整理,主要内容包括:Qt官网、编码风格、GitHub & Third-Party、社区论坛、博客、书籍等。
满满的都是干货,独乐乐不如众乐乐。。。
Qt官网
- Qt官网:https://www.qt.io
- Open Source下载:http://www.qt.io/download-open-source/#section-2
- Qt WiKi:https://wiki.qt.io/Main_Page
编码风格
- Qt Coding Style
- http://wiki.qt.io/Qt_Coding_Style(low-level)
- http://wiki.qt.io/Coding_Conventions( higher-level )
- Google开源项目风格指南
http://zh-google-styleguide.readthedocs.io/en/latest
里面包含五份(C++ 、Objective-C、Python 、JSON、Shell )中文版的风格指南。 - C coding style guidelines
http://www.quinapalus.com/coding.html - C++ Coding Standard
http://www.possibility.com/Cpp/CppCodingStandard.html
GitHub & Third-Party
- Awesome Qt
一系列强大的C/C++框架、库、资源和其它好东西。 - free-programming-books-zh_CN
https://github.com/justjavac/free-programming-books-zh_CN
免费的计算机编程类中文书籍
社区论坛
国外论坛:
国内论坛:
- CSDN Qt论坛
http://bbs.csdn.net/forums/Qt
作为中国最大的IT社区和服务平台,CSDN也在持续的关注Qt的发展,Qt技术社区也已经上线很久了,可以在里面进行知识传播 - 提问、分享自己的一些学习心得、资料等。 - Qter开源社区
http://www.qter.org
致力于Qt普及工作!里面富含Qter们开发的实用开源项目和作品,以及一系列优秀的原创教程 - 图文并茂、简单易学,力争帮助每一位初学者快速入门。
建议大家经常多去浏览一下,会有很多收获,技术文章往往有一定的深度,初学者可能会不太适应。
博客
- 朝闻道
http://www.cnblogs.com/findumars
朝闻道,夕可死矣!为了成为IT高手,为了挽回我失去的青春,也为了我亲爱的家人,下决心刻苦学习编程知识,虽九死而不悔! 金头盔飞行员蒋佳冀:知道了不行,熟悉也不够,要真正进入潜意识,成为条件反射才行。
书籍
- 《QmlBook》 - A Book about Qt5:
- 书名:《C++ Primer plus》
作者:Stephen Prata
介绍:从入门到精通必读经典教程。它被誉为“开发人员学习C++的教程,没有之一”! - 书名:《C++ Primer》
作者:Stanley B. Lippman、Josee Lajoie、Barbara E. Moo
介绍:久负盛名的经典教程,系统全面地介绍了C++,可以看成是学习C++的百科全书,C++程序猿必备。 - 书名:《C++ GUI Qt 4编程》
作者:Jasmin Blanchette、Mark Summerfield
介绍:Trolltech的Qt培训教材,生动、全面、深刻地阐明了Qt程序的设计理念,轻松创建跨平台的解决方案。 - 书名:《C++ Qt设计模式》
作者: Alan Ezust
介绍:利用跨平台开源软件开发框架Qt阐释了C++和设计模式中的主要思想,既复习了设计模式,又学了C++/Qt,对于使用其它框架也是一个非常有用的参考。 - 书名:《Qt高级编程》
作者:Mark Summerfield
介绍:阐述Qt高级编程技术的书籍。以工程实践为主旨,是对Qt现有的700多个类和上百万字参考文档中部分关键技术深入、全面的讲解和探讨。 - 书名:《Qt5开发实战》
作者:金大zhen、张红艳 译
介绍:在全面阐述Qt基本功能的基础上,对新增的功能和服务进行了重点介绍。同时运用大量示例,集中讲解了应用程序的开发方法、技巧和必需的API。 - 书名:《Qt5开发及实例》
作者:陆文周
介绍:以Qt5.4为平台,循序渐进,在介绍开发环境的基础上,系统介绍Qt5应用程序的开发技术,通过实例介绍和讲解内容,将知识和能力融为一体。一般能够在比较短的时间内掌握Qt5应用技术。 - 书名:《Qt on Android 核心编程》
作者:安晓辉
介绍:基于Qt 5.2,详细讲述如何在移动平台Android上使用Qt框架进行开发。无论是专注于传统的桌面软件开发,还是希望尝试使用Qt在Android平台开发,都可以从中获得重要的知识与实例。 - 书名:《Qt Quick核心编程》
作者:安晓辉
介绍:着力于QML语言基础、事件、Qt Quick基本元素,辅以简要的ECMAScript(JavaScript)语言介绍,能够快速熟悉Qt Quick的基本知识和开发过程,详尽入微。 - 书名:《Qt Creator快速入门 》
作者:霍亚飞
介绍:基于Qt Creator编写,全面涉及 Qt Quick;植根于 Qt 网络博客教程,可无限更新;对每个知识点详尽讲解,并设计了示例程序。 - 书名:《Qt5编程入门》
作者:霍亚飞、devbean
介绍:基于Qt5.3编写,全面涉及 Qt Quick;植根于 Qt 网络博客教程,可无限更新;对每个知识点详尽讲解,并设计了示例程序。 - 书名:《精通Qt4编程》
作者:蔡志明 等编
介绍:详细介绍了Qt的基础知识和GUI编程应用,举例翔实,内容全面,基本涵盖了Qt编程的各个方面。 - 书名:《Linux环境下Qt4图形界面与MySQL编程》
作者:邱铁
介绍:基于Qt4.7,采用“深入分析控件+实例解析”的方式,配合实际工程项目,对Linux操作系统下的Qt与MySQL编程技术进行了全面细致的讲解。 - 书名:《Linux Qt GUI开发详解》
作者:李彬
介绍:介绍了Linux下Qt用户界面开发的重要的核心知识,从基础界面控件使用开始,中间又详细讲解了QtWebKit的开发,语言通俗易懂,通过实例演示强化读者对章节知识点的掌握,以提高读者的实战水平及经验。 - 书名:《零基础学Qt4编程》
作者:吴迪
介绍:针对初学者写的,很详细,如果看了还不会的话,那也是没谁了!
更多
以上所有资料,均为个人整理,代表个人观点,无任何排名、优先级之说!
持续更新,敬请期待。。。
欢迎大家将珍藏已久的经典资料共享出来,造福你我他。。。
QT settings
( 一)简单了解配置文件(.ini)格式:
number=2
[config]
node1=sucess;iii
size=20
[source]
name=PC
其中每行必须顶格写,;后的为注释部分,可用[]来定义上一层的项目。
代码示例如下:
QSettings settings("/srv/c.ini",QSettings::IniFormat);
ui->label->setText(settings.value("config/node1").toString());
ui->lineEdit->setText(settings.value("config/size").toString());
int a=settings.value("number").toInt();
qDebug("the value a is: %d",a);
(二)深入一些
QT4.0一个非常有用的类QSettings
QSettings是qt4.0提供的一个读取配置文件的类,在windows平台,它提供了ini文件读些,注册表读写的功能。而且使用也非常简单。
QSettings::Format有两种:
QSettings::NativeFormat在windows平台可以读写windows注册表.
QSettings::IniFormat可以读写ini格式的配置文件
在Unix/X11平台下这两个Format效果是一样的。
1.读写注册表
ini文件格式如下:
(三)综合理解
QSettings *ConfigIni = new QSettings(QSettings::Ini);
ConfigIni->insertSearchPath(QSettings::Unix, "/home/Dawei");.//配置文件目录
ConfigIni->writeEntry(QString::fromUtf8("/config./opt/参数1"), QString::fromUtf8("中文"));
String aaa = ConfigIni->readEntry(QString::fromUtf8("/config./opt/参数1");
delete ConfigIni;
会在/home/Dawei目录下生成config.rc配置文件内容为
[opt]
参数1=中文
---------------------------------------
QSettings settings("../etc/bpms.conf", QSettings::IniFormat, &app);
QString db_hostname = settings.value("hostname").toString();
QString db_database = settings.value("database").toString();
QString db_username = settings.value("username").toString();
QString db_password = settings.value("password").toString();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(db_hostname);
db.setDatabaseName(db_database);
db.setUserName(db_username);
db.setPassword(db_password);
---------------------------------------------------------------
需要#include <QSettings>
只举几个简单的例子:
1、用QSettings写注册表
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); reg->setValue("registered",true); delete reg;
当然reg->setValue还可以写入字符串,整型之类的数据。
比如reg->setValue("registered","yes");
2、用QString读注册表
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); if (reg->value("registered",false).toBool()) { QMessageBox::information(NULL,"information","registered"); } delete reg;
还可以toInt(),toString()等。
3、用QSettings写ini文件:
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ConfigIni->setValue("/config/node1",ui->lineEdit->text()); delete ConfigIni;
4、用QSettings读ini文件:
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString()); delete ConfigIni;
这几段代码都是在Qt Creator里面写的,所以用ui->lineEdit*->text()和ui->lineEdit*->setText()做输入和输出了。
在文档中的QSettings Class Reference部分讲的很清楚
---------------------------------------------------------------------
m_nDevNo = nDevNo;
QString strTemp;
QString xmlPath = CSC_APP.m_strWorkPath + "/InitInfo.ini";
QSettings *mySetting = new QSettings(xmlPath,QSettings::IniFormat);
foreach (QString group, mySetting->childGroups())
{
mySetting->beginGroup(group);
foreach (QString key, mySetting->childKeys())
{
QTextCodec *codec=QTextCodec::codecForName("GBK");
QString outStr = codec->toUnicode(key.toLatin1());
if (outStr == "自描述语言")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.SelfDspLgu->setCurrentIndex(1);
else
ui.SelfDspLgu->setCurrentIndex(0);
}
if (outStr == "工作语言")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.WorkLgu->setCurrentIndex(1);
else
ui.WorkLgu->setCurrentIndex(0);
}
if (outStr == "离线工作")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.WorkMode->setCurrentIndex(1);
else
ui.WorkMode->setCurrentIndex(0);
}
if (outStr == "召唤自描述方式")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.SelfDspSource->setCurrentIndex(1);
else
ui.SelfDspSource->setCurrentIndex(0);
}
if (outStr == "组播地址")
{
strTemp = mySetting->value(key,"236.8.8.8").toString();
ui.GrpAddress->setText(strTemp);
}
if (outStr == "接收端口号")
{
strTemp = mySetting->value("接收端口号","2000").toString();
ui.RecPort->setText(strTemp);
}
if (outStr == "发送端口号")
{
strTemp = mySetting->value("发送端口号","2001").toString();
ui.TargetPort->setText(strTemp);
}
if (outStr == "启用本机地址")
{
strTemp = mySetting->value(key,"0").toString();
}
if (outStr == "本机地址")
{
strTemp = mySetting->value(key,"0").toString();
ui.LocalIp->setText(strTemp);
}
if (outStr == "装置名称")
{
strTemp = mySetting->value(key,"0").toString();
ui.EqpName->setText(strTemp);
}
if (outStr == "装置地址")
{
strTemp = mySetting->value(key,"0").toString();
ui.EqpAddress->setText(strTemp);
}
if (outStr == "装置IP")
{
strTemp = mySetting->value(key,"0").toString();
ui.TargetIp->setText(strTemp);
}
}
mySetting->endGroup();
number=2
[config]
node1=sucess;iii
size=20
[source]
name=PC
其中每行必须顶格写,;后的为注释部分,可用[]来定义上一层的项目。
代码示例如下:
QSettings settings("/srv/c.ini",QSettings::IniFormat);
ui->label->setText(settings.value("config/node1").toString());
ui->lineEdit->setText(settings.value("config/size").toString());
int a=settings.value("number").toInt();
qDebug("the value a is: %d",a);
(二)深入一些
QT4.0一个非常有用的类QSettings
QSettings是qt4.0提供的一个读取配置文件的类,在windows平台,它提供了ini文件读些,注册表读写的功能。而且使用也非常简单。
QSettings::Format有两种:
QSettings::NativeFormat在windows平台可以读写windows注册表.
QSettings::IniFormat可以读写ini格式的配置文件
在Unix/X11平台下这两个Format效果是一样的。
1.读写注册表
- //注意的就是路径名必须是"/"而不是"\\"等.否则不能读写,同时注意
- //Format为QSettings::NativeFormat
- QSettings *settings = new QSettings("HKEY_CURRENT_USER/", QSettings::NativeFormat);
- //写HKEY_CURRENT_USER/regedit/test,设置test值为red
- settings->setValue("regedit/test", "red");
- //读 HKEY_CURRENT_USER/regedit/test,默认值是ddd
- QString value = settings->value("regedit/test", "ddd").toString();
- 删除设置对应的是settings->remove( const QString & key )
ini文件格式如下:
- [Alpha]
- Beta/Beta=1, 3, 4
- Beta/Gamma=2
- Beta/Delta=1111
- Beta/Epsilon=5
- Iota=7
- Omicron=11
- QSettings *settings = new QSettings(fileName, QSettings::IniFormat);
- //写Beta/Beta
- settings->setValue("Alpha/Beta/Beta", 68);
(三)综合理解
QSettings *ConfigIni = new QSettings(QSettings::Ini);
ConfigIni->insertSearchPath(QSettings::Unix, "/home/Dawei");.//配置文件目录
ConfigIni->writeEntry(QString::fromUtf8("/config./opt/参数1"), QString::fromUtf8("中文"));
String aaa = ConfigIni->readEntry(QString::fromUtf8("/config./opt/参数1");
delete ConfigIni;
会在/home/Dawei目录下生成config.rc配置文件内容为
[opt]
参数1=中文
---------------------------------------
QSettings settings("../etc/bpms.conf", QSettings::IniFormat, &app);
QString db_hostname = settings.value("hostname").toString();
QString db_database = settings.value("database").toString();
QString db_username = settings.value("username").toString();
QString db_password = settings.value("password").toString();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(db_hostname);
db.setDatabaseName(db_database);
db.setUserName(db_username);
db.setPassword(db_password);
---------------------------------------------------------------
需要#include <QSettings>
只举几个简单的例子:
1、用QSettings写注册表
- QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",
- QSettings::NativeFormat);
- reg->setValue("registered",true);
- delete reg;
当然reg->setValue还可以写入字符串,整型之类的数据。
比如reg->setValue("registered","yes");
2、用QString读注册表
- QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",
- QSettings::NativeFormat);
- if (reg->value("registered",false).toBool())
- {
- QMessageBox::information(NULL,"information","registered");
- }
- delete reg;
还可以toInt(),toString()等。
3、用QSettings写ini文件:
- QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);
- ConfigIni->setValue("/config/node1",ui->lineEdit->text());
- delete ConfigIni;
4、用QSettings读ini文件:
- QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);
- ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString());
- delete ConfigIni;
这几段代码都是在Qt Creator里面写的,所以用ui->lineEdit*->text()和ui->lineEdit*->setText()做输入和输出了。
在文档中的QSettings Class Reference部分讲的很清楚
---------------------------------------------------------------------
m_nDevNo = nDevNo;
QString strTemp;
QString xmlPath = CSC_APP.m_strWorkPath + "/InitInfo.ini";
QSettings *mySetting = new QSettings(xmlPath,QSettings::IniFormat);
foreach (QString group, mySetting->childGroups())
{
mySetting->beginGroup(group);
foreach (QString key, mySetting->childKeys())
{
QTextCodec *codec=QTextCodec::codecForName("GBK");
QString outStr = codec->toUnicode(key.toLatin1());
if (outStr == "自描述语言")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.SelfDspLgu->setCurrentIndex(1);
else
ui.SelfDspLgu->setCurrentIndex(0);
}
if (outStr == "工作语言")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.WorkLgu->setCurrentIndex(1);
else
ui.WorkLgu->setCurrentIndex(0);
}
if (outStr == "离线工作")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.WorkMode->setCurrentIndex(1);
else
ui.WorkMode->setCurrentIndex(0);
}
if (outStr == "召唤自描述方式")
{
if ( mySetting->value(key,"0").toInt() == 1)
ui.SelfDspSource->setCurrentIndex(1);
else
ui.SelfDspSource->setCurrentIndex(0);
}
if (outStr == "组播地址")
{
strTemp = mySetting->value(key,"236.8.8.8").toString();
ui.GrpAddress->setText(strTemp);
}
if (outStr == "接收端口号")
{
strTemp = mySetting->value("接收端口号","2000").toString();
ui.RecPort->setText(strTemp);
}
if (outStr == "发送端口号")
{
strTemp = mySetting->value("发送端口号","2001").toString();
ui.TargetPort->setText(strTemp);
}
if (outStr == "启用本机地址")
{
strTemp = mySetting->value(key,"0").toString();
}
if (outStr == "本机地址")
{
strTemp = mySetting->value(key,"0").toString();
ui.LocalIp->setText(strTemp);
}
if (outStr == "装置名称")
{
strTemp = mySetting->value(key,"0").toString();
ui.EqpName->setText(strTemp);
}
if (outStr == "装置地址")
{
strTemp = mySetting->value(key,"0").toString();
ui.EqpAddress->setText(strTemp);
}
if (outStr == "装置IP")
{
strTemp = mySetting->value(key,"0").toString();
ui.TargetIp->setText(strTemp);
}
}
mySetting->endGroup();
Qt 的QString类的使用
Qt 的QString类的使用
Qt的QString类提供了很方便的对字符串操作的接口。
- 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替。
QString::fill ( QChar ch, int size = -1 )
例:
QString str = "Berlin"; str.fill('z'); // str == "zzzzzz" str.fill('A', 2); // str == "AA"
2,从字符串里查找相同的某个字符串str。
int QString::indexOf ( const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
例如:
QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1
3指定位置插入字符串
QString & QString::insert ( int position, const QString & str )
例如:
QString str = "Meal"; str.insert(1, QString("ontr")); // str == "Montreal"
3,判断字符串是否为空。
bool QString::isEmpty () const
如:
QString().isEmpty(); // returns true QString("").isEmpty(); // returns true QString("x").isEmpty(); // returns false QString("abc").isEmpty(); // returns false
4.判断字符串是否存在。
bool QString::isNull () const
例如:
QString().isNull(); // returns true QString("").isNull(); // returns false QString("abc").isNull(); // returns false
5,从左向右截取字符串
QString QString::left ( int n ) const
例如:
QString x = "Pineapple"; QString y = x.left(4); // y == "Pine"
6,从中间截取字符串。
QString QString::mid ( int position, int n = -1 ) const
例如:
QString x = "Nine pineapples"; QString y = x.mid(5, 4); // y == "pine" QString z = x.mid(5); // z == "pineapples"
7,删除字符串中间某个字符。
QString & QString::remove ( int position, int n )
例如:
QString s = "Montreal"; s.remove(1, 4); // s == "Meal"
8,替换字符串中的某些字符。
QString & QString::replace ( int position, int n, const QString & after )
例如:
QString x = "Say yes!"; QString y = "no"; x.replace(4, 3, y); // x == "Say no!"
9,以某个字符切割字符串。(最近经常用到的)
QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const
例如:
QString str; QString csv = "forename,middlename,surname,phone"; QString path = "/usr/local/bin/myapp"; // First field is empty QString::SectionFlag flag = QString::SectionSkipEmpty; str = csv.section(',', 2, 2); // str == "surname" str = path.section('/', 3, 4); // str == "bin/myapp" str = path.section('/', 3, 3, flag); // str == "myapp"
10,把整型,浮点型,或其他类型转化为QString
QString & QString::setNum ( uint n, int base = 10 )
相类似的还有好多重载函数,想深入了解,还是要看Qt帮助文档的。
Subscribe to:
Posts (Atom)