From: http://www.yafeilinux.com/?p=763
<一>Hello Qt小试牛刀!
说明:我们需要在Linux下已经安装了Qt。
1.下面是整个程序的详细介绍:
#include <QApplication>
//第一行是定义一个应用程序类<QApplication>的头文件,所有Qt图形化应用程序都包含在此头文件,它包含了Qt图形化应用程序的各种资源、基本设置、控制流以及事件处理等,如果是Qt的非图形化应用程,则需包含<QCoreApplication>
#include <QLabel>
//第二行定义一个应用到的标签类<QLabel>的头文件,
int main(int argc,char *argv[])
//主函数作为应用程序的入口,所有Qt应用程序都必须有一个主函数名,以argc和argv作为入口参数。
{
//定义一双花括符,这是程序的书写格式。
QApplication app(argc,argv);
//创建一个QApplication对象,用来管理整个应用程序所用到的资源。每个Qt应用程序有且只有一个QApplication对象。argc和argv是QApplication构造函数的两个参数。支持Qt的程序处理命令行参数。
QLabel *label = new QLabel(“Hello Qt!~”);
//创建一个显示”Hello Qt!”的QLabel标签窗口部件(window gadget简称widget)作为应用程序的窗口。应用程序窗口通常是一个包含了一个QMenuBar(Qt菜单栏)、一些QToolBar(Qt工具栏)、一个QStatusBar(Qt状态栏)以及一些其他窗口部件的窗口部件。大多数应用程序都会用QMainWindow或者一个QDialog作为它的窗口,但Qt可以用任何窗口部件作为它的应用程序窗口,这就是为什么很多人说Qt很灵活的原因。其实可以省略这样定义QLabel对象的:QLabel label(“Hello Qt!”);将QLabel标签窗口部件显示修改为lable.show();
Label->show();
//QLable的标签窗口部件在创建的时候是被隐藏的,因此我们要调用show()函数来显示标签窗口部件
app.exec();
//调用QApplication的exec()方法,将应用程序的控制权限传递给Qt,此时程序会进入事件循环状态模式,程序等待用户对其发生的动作相应。Qt将完成事件处理及显示的工作在应用程序退出时返回exec()的值。
}
2.在Linux下的命令行编辑程序:
[root@localhost root]# mkdir hello
//mkdir命令创建一个hello目录
[root@localhost root]# cd hello
//cd命令切换到刚才创建的hello目录
[root@localhost hello]# vi main.cpp
//在hello目录中用vi创建一个main.cpp文件 将下面的代码输入到main.cpp文件中,前面有介绍了,这里就不多说了
#include <QApplication>
#include <QLabel>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QLabel *label = new QLabel(“Hello Qt”);
Label->show();
return app.exec();
}
3.然后在命令行编译程序:
[root@localhost hello]# qmake –project
//执行qmake –project,因为目录是hello,因此在hello目录下生成一个与平台无关的项目文件hello.pro,
[root@localhost hello]# qmake hello.pro
//执行qmake hello.pro项目文件后,在hello目录下生成一个与平台有关的Makefile文件。
[root@localhost hello]# make
//执行make进行编译源代码,并生成main.o目标文件及hello执行文件。
[root@localhost hello]# ./hello
//执行hello,就会弹出Hello Qt窗口,到此说明成功了
对显示信息进一步了解,将main.cpp程序中的QLabel *label = new QLabel(“Hello Qt!”);中的Hello Qt!用html格式进行修改,修改如下: QLabel *label = new QLabel(“<h2><i>Hello</i>””<font color=red>Qt!</font></h2>”); 意思是<h2>Hello Qt</h2>显示与二号标题字体大小, html的<i></i>标签将Hello加倾斜表示,<font color=red>Qt!</font>表示将Qt!颜色设置为红色。点击QLabel标签窗口部件左上角的”X”关闭窗口,用vi命令打开main.cpp C++程序源文件,并修改文本显示的内容,然后保存退出,重新执行make命令编译源代码
[root@localhost hello]# ./hello
//再次执行hello可执行文件,弹出的QLabel标签窗口与刚才的不同,现实了刚才的预想的效果
==============================================================================================参考上面的内容,我实际操作了一遍。环境:Fedora12 + QTCreator2.0.1
在执行“make"时出现了错误,提示ld找不到:-lqt-mt,于是打开Makefile仔细看了下,发现里面生成的内容有问题,搜索目录中有qt3.3的目录,于是想到可能是生成的Makefile有问题,而这个文件刚好是由qmake来生成的,因此推断所调用的qmake版本不对。
仔细看看Fedora12就会发现,在系统装好后,默认会安装上QT3和QT4的,而且环境变量如QTDIR, QTINC的指向都不是QTCreator目录下的。修改前的环境变量为:
QTDIR=/usr/lib/qt-3.3
QTINC=/usr/lib/qt-3.3/include
QT_IM_MODULE=xim
QTLIB=/usr/lib/qt-3.3/lib
PATH=/opt/oracle/product/11.2.0/db_1/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/zcm/bin
修改后的环境变量为(我电脑上qtcreator的安装目录为:/opt/qtsdk-2010.05):
[zcm@qt #160]$cat qt.config
QTDIR=/opt/qtsdk-2010.05
QTINC=/opt/qtsdk-2010.05/qt/include
QT_IM_MODULE=xim
QTLIB=/opt/qtsdk-2010.05/lib
PATH=/usr/lib/qt4/bin:/opt/oracle/product/11.2.0/db_1/bin:/opt/qtsdk-2010.05/qt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/zcm/bin
最后,执行make生成hello可执行文件,测试运行:./hello
仔细比较下下就会发现:不同版本qmake生成的Makefile内容是不同的,这就是利用makefile生成可执行文件时会失败的原因了!