Hello Qt(在Linux下编写运行Qt程序)

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


配置好上面的环境变量后,需要重新生成Makefile,即执行:qmake hello.pro

最后,执行make生成hello可执行文件,测试运行:./hello


仔细比较下下就会发现:不同版本qmake生成的Makefile内容是不同的,这就是利用makefile生成可执行文件时会失败的原因了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git pull提示当前branch没有跟踪信息

在执行git pull的时候&#xff0c;提示当前branch没有跟踪信息&#xff1a; git pull There is no tracking information for the current branch. Please specify which branch you want to merge with.对于这种情况有两种解决办法&#xff0c;就比如说要操作master吧&#x…

触发器三(行级DML触发器)(学习笔记)

行级DML触发器 每当一条记录出现更新操作时进行触发操作定义时要定义FOR EACH ROW 使用":old.字段"和":new.字段"标识符 No.触发语句 :old字段:new字段1INSERT 未定义&#xff0c;字段内容为NULLINSERT操作结束后&#xff0c;为增加数据值2UPDATE更新数据…

解开 Windows 下的临界区中的代码死锁(转)

摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制&#xff0c;这一主题并没有引起太多关注&#xff0c;因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时&#xff0c;对 Windows 中临界区的深刻理解非常有用。 本文深入研究临界区的原理&#xff0c…

用Python和Pygame写游戏-从入门到精通(1)

From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开&#xff0c;打算做一个Pygame的系列&#xff0c;翻译自Will McGugan的《Beginning Game Development with Python and Pygame –From Novice to Professional》&#xff0c;有兴趣的朋友可以搜一…

解决el-select后台一次返回大数据量渲染慢导致页面卡顿的问题

场景一 解决了一次性渲染大量数据问题 业务场景是后台一次返回10万多条数据需要在下拉框中展示,直接渲染会导致页面卡顿且需要很长时间等待,用户体验极差,所以我把这个改造了一下,直接上代码, 里面注释写的很清楚了就不解释了. <template><div class"content&q…

c++ primer 笔记 (二)

第二章笔记 &#xff08;貌似记得有点多&#xff09; 把负值赋给unsigned对象时完全合法的&#xff0c;其结果是该负数对该类型的取值个数求模后的值 -1 &#xff08;对265求模&#xff09; 255float型只能保证6位有效数字&#xff0c;而double型至少可以保证10位有效数…

c#按ESC退出 或者接受其他键盘消息

From: http://blog.csdn.net/chenshizero/article/details/2173443 先将窗口的KeyPreview设置为true,然后再在窗口的KeyPressUp事件中写代码就可以了 private void Form1_KeyUp(object sender, KeyEventArgs e){if(e.KeyValue 27)//if (e.KeyData Keys.Escape)Application.Ex…

在诺基亚S60v3上运行.NET程序

诺基亚手机采用的几乎都是Symbian OS操作系统。而.NET Framework则是Windows平台的专利&#xff0c;因此.NET程序只能运行在使用Windows Mobile系统的手机上。那么Symbian OS是否就没法运行.NET程序了呢&#xff1f; 答案是否定的。RedFiveLabs一直致力于在Symbian OS上实现.NE…

React开发(162):React关于 this.props.children 总结

this.props.children 的值有三种可能&#xff1a; 如果当前组件没有子节点&#xff0c;它就是 undefined ; 如果有一个子节点&#xff0c;数据类型是 Object&#xff1b; 如果有多个子节点&#xff0c;数据类型就是 Array。

GIT提交的时候出现 ! [rejected] master -> master (non-fast-forward)错误

搜了好久&#xff0c;才找到一个能用的&#xff0c;上面的大概意思是本地库和远程库没有同步导致无法提交合并&#xff0c;那么找到原因了就好办了&#xff0c;只要将本地库和远程库同步就可以了。 git pull origin master --allow-unrelated-histories 或 git pull origin re…

响应式布局---菜单

一个简单的响应式菜单,仅使用media query实现. 上图的作用就是将普通的菜单在缩小浏览器屏幕到一定宽度,或者是在移动设备上的显示效果.现在分步进行实现: 第一步:先构建一个普通的菜单,具体显示如图: 结构如下: <nav class"nav"><ul><li class"…

C# 窗口全屏 隐藏任务栏 (代码)

From: http://blog.csdn.net/mask_of_zorro/article/details/2351091 为了解决C# Windows应用程序全屏显示&#xff0c;在网上找了很多解决方法。当然其中也有成功的方法&#xff0c;但看起来复杂且对我等菜鸟级的人来说更难于理解。其中发现以下几行代码实现真正的全屏显示&a…

Linux管理磁盘配额

&#xff21;、磁盘配额作用限制普通用户使用磁盘空间&#xff0c;不至于因为个别人的浪费而影响到其它人的正常使用&#xff1b;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />&#xff22;、需要内核的支持&#xff1b;&…

Element el-row el-col 布局组件详解

本文目录 背景分栏布局分栏间隔分栏偏移对齐方式响应式布局小结 1. 背景 element的布局方式与bootstrap原理是一样的&#xff0c;将网页划分成若干行&#xff0c;然后每行等分为若干列&#xff0c;基于这样的方式进行布局&#xff0c;形象的成为栅栏布局。 区别是element可…

sql数据库监控语句

--查找被阻塞进程 Select * from master..sysprocesses where dbid9 and blocked > 0--查找阻塞头进程 select * from master..sysprocesses p where dbid9 and blocked<0 and exists (select 1 from master..sysprocesses where blocked p.spid)--查找等待时间长的进程…

C# WinForm 中Label自动换行 解决方法

From: http://hi.baidu.com/tewuapple/blog/item/74070a2451cbcc7c36a80f76.html 在TableLayoutPannel中放着一些Label 如果把Label的AutoSize属性设成True的话&#xff0c;文字超过label长度时就会自动增加&#xff0c;直到后面的字出窗体以外 设置成False时&#xff0c;一旦…

厂家官网常用链接

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1、 IBM develperWorks 中国http://www.ibm.com/developerworks/cn/特点&#xff1a;归档清晰&#xff0c;文档专业质量高&#xff0c;多名家作品&#xff1b;2、 DELL中文官…

axios (get post请求、头部参数添加)傻瓜式入门axios

傻瓜式入门&#xff0c;简单粗暴说用法 通过cdn引入js文件 <script src"https://unpkg.com/axios/dist/axios.min.js"></script>get请求&#xff0c;默认’Content-Type’: ‘application/json’&#xff0c;可在头部参数中&#xff0c;修改Content-Ty…