C + + to Qt
QT is a C + + library, QT has a little expansion on the basis of ANSI C + +.
But the domestic seems more impetuous, learning qt A lot even basic C + + How to compile seems to be not very clear. This article discards the constraints of the IDE or Qmake, CMake, and other tools, and attempts to transition from standard C + + to Qt compilation through a few examples.
This article is all about the most basic things, perhaps, as long as you use C + + Qt, regardless of which tool (Qmake, CMake, Boost.build, Qtcreator, vs2008, Eclipse 、...), the content of this article is to be understood ( Although we do not actually write the program, we do not directly use the C + + compiler to compile the QT program.
If you're afraid of the command line.
Example one: Simple console program
A very simple example of a QT extension is useless: (that is, this is a normal C + + program)
#include <QtCore/QCoreApplication> #include <qtcore/qdebug>int main (int argc, char** argv) { Qcoreapplication app (argc, argv); Qdebug () << "Hello qt!"; App.exec ();} []http://blog.hehehehehe.cn/a/4033.htm on the net of drinking small wine
As we all know, compiling a C + + program is nothing but compiling preprocessing, compiling, linking
Compile preprocessor: Header file path and necessary macros
Compiler: Some compilation parameters
Linker: Some link parameters and libraries to link to
g++
Simple one-line command to generate Main.exe (under Linux, generate executable program main)
g++ Main.cpp-dqt_core_lib-ie:qt4.7.0include-o Main-le:qt4.7.0lib-lqtcore4
Single-line command, very simple:
-I specify header file path
-L Specify the library file path
-l Specifies the library that needs to be linked
-D define the necessary macros (in fact, this macro is not necessary for this applet)
-o Specifies the generated executable file name
Cl
Simple one-line command to generate Main.exe
CL Main.cpp-id:/qt/4.7.0/include-dqt_core_lib-femain-link-libpath:d:/qt/4.7.0/lib QtCore4.lib
It's still simple.
-I header file path
-D Define necessary macros
-fe specifying executable program file names
-link is followed by linker parameters
Example two: a simple GUI program
This time it's a little bit more complicated, not a single console program, but a simple GUI program
#include <QtGui/QApplication> #include "widget.h" int main (int argc, char** argv) {qapplication app (argc, argv); Widget W; W.show (); return app.exec ();}
#include <qtgui/qwidget>class widget:public qwidget{public:widget (Qwidget * parent=null);};
#include "widget.h" Widget::widget (Qwidget * parent): Qwidget (parent) {}
Similarly, the program does not use QT extensions, which are compiled directly from the C + + compiler:
g++
g++ main.cpp Widget.cpp-dqt_core_lib-dqt_gui_lib-ie:qt4.7.0-beta2include-o MAIN-LE:QT4.7.0-BETA2LIB-LQTCORE4-LQTG Ui4
Because we used the Qtgui module, we compared it with the previous:
Note: Under Windows
This command is available if you are on a non-Windows platform. But under Windows, you know: Sub-console and Windows two link subsystem, and the entry function is divided into main and WinMain.
This command, the compiled Main.exe, will pop up the console. To avoid the console, use the following command:
g++ main.cpp widget.cpp-dqt_core_lib-dqt_gui_lib-dqt_needs_qmain-ie:qt4.7.0-beta2include-o Main-le: Qt4.7.0-beta2lib-lqtcore4-lqtgui4-lqtmain-wl,-subsystem,windows
There are two more options:
Qtmain a WinMain function in the library, it calls the main function of our code. That is, for the compiler: the name of the entry function has changed.
-wl,-subsystem,windows you know, link windows subsystem
For the MinGW, there is a macro qt_needs_qmain here, this thing is very interesting. We mentioned this in detail in the QT Windows link subsystem and entry function (the final version). (Here, but you can ignore it, it's not going to go wrong, and there's no difference to feel)
Cl
As with the g++ under Windows, with the console:
CL main.cpp widget.cpp-id:/qt/4.7.0/include-dqt_core_lib-dqt_gui_lib-femain-link-libpath:d:/qt/4.7.0/lib QtCore4. Lib QtGui4.lib
Without console:
CL Main.cpp widget.cpp-id:/qt/4.7.0/include-dqt_core_lib-dqt_gui_lib-femain/md-link-libpath:d:/qt/4.7.0/lib-subs Ystem:windows qtmain.lib QtCore4.lib QtGui4.lib
Ibid.: Specify link subsystem, enable WinMain entry function
How multi-file programs are managed
What's the downside of calling the compiler directly?
Many parameters, each time the manual input, it is inevitable error. (for example, we've used as few parameters as possible, so you're probably dizzying).
Second, it's important that everything is recompiled whenever a file is modified.
The traditional way to change this is to write Makefile, and then compile with just the input make, and he will determine which files are changed and need to be recompiled.
The other features that are provided by the IDE itself, such as vs. Here's a quick look at the corresponding makefile file for this example:
Mingw32-make's Makefile File
Cppflags =-dqt_core_lib-dqt_gui_lib-ie:qt4.7.0includeldflags =-le:qt4.7.0lib-lqtcore4-lqtgui4-lqtmain-wl,- Subsystem,windowsobjects = MAIN.O widget.odest = main$ (dest): $ (objects) g++-o [email protected] $ (objects) $ (LDF LAGS)
NMAKE's Makefile file
Cppflags =-id:/qt/4.7.0/include-dqt_core_lib-dqt_gui_lib-mdldflags =-libpath:d:/qt/4.7.0/lib-subsystem:windows Qtmain.lib QtCore4.lib qtgui4.libobjects = main.obj widget.objdest = main.exe$ (dest): $ (objects) Link $ (objects) $ (ldflags)
Do not introduce this, because makefile writing is also a science. Very difficult to write, all have Qmake, cmake these tools to help us generate makefile files
Example three: introduction of MOC
The extension of Qt to C + + is mainly 3 aspects:
Meta-object system, files that contain q_object macros (. h,. CPP, etc.) require MOC preprocessing
Resource system,. qrc files require RCC for preprocessing
Interface System,. ui files need to be preprocessed by UIC
<p Post-footer "=" "style=" margin-top:0px; margin-bottom:6px; padding:0px; Text-indent:2em; Line-height:normal; " >
This article is from the "11486263" blog, please be sure to keep this source http://11496263.blog.51cto.com/11486263/1837980
C + + to QT compilation Process method