今天在Jeltter的介绍之下,下载了Qt 4.2.2 Win Platform Evaluation for Visual Studio 2003并简单玩了一下,感觉Qt的确是一个很神奇的东西。特别是在它强大的代码生成工具帮助之下,程序员所要写的东西减少许多,能够完成的功能却令人惊讶的增加,甚至超过C++语言所能提供的灵活性——这些特性从一开始就让我不得不称奇。
以下将要讲到的内容都包含在这个工程当中,可以下载看看运行效果。
点击下载此文件
首先要从安装说起。我下载的是Qt的Evaluation版本,安装时需要一个Evaluation序列号,这个序列号可以通过http://www.trolltech.com/products/qt/evaluate来申请。由于Jeltter已经申请了一个,所以我就用他的了,OK,经过一段时间的等待,安装完毕。此时有一个小插曲,就是如何将Evaluation版本“升级”成Commercial版本,这个就期待Jeltter在他的blog上面为我们来介绍了,我就按下不表。
接着,重起Visual Studio 2003,我就可以看到Qt已经无缝的集成到Visual Studio里面去了。
在Visual Studio的菜单上也加入了Qt的内容。
新建项目时,在对话框中也加入了Qt专用的项目向导,相当方便。
新建一个名为HelloQtWindows的项目,使用Qt Application向导所提供的默认配置直接生成程序,一个最简单地程序框架就有了。既然是最傻瓜的编程方法,那编辑对话框的事情当然应该交给资源编辑器来完成了,于是我兴冲冲的打开资源视图,结果什么都没有!原来,Qt的所有界面信息都存在一个*.ui文件里面,在解决方案资源管理器里面双击Form Files/helloqtwindows.ui就可以打开Qt的窗口设计器,粗略的比较发现,它比MFC的窗口设计器强大多了,比.Net的设计器也绝无任何的劣势,相当的好用!
我胡乱的拖动一些控件到这个窗口里面去,就像这样:
好了,直接编译运行,这个窗口就按我所想象的模样出来了。
非常简单就出来一个窗口,那么接下来当然多少是应该给窗口加点功能吧。跟一般流行的设计器一样,在控件上面双击鼠标就可以生成最常用的事件响应函数,同时也可以在控件上单击右键来连接事件(Connect Signal),还可以用Qt菜单里的Qt Signal Slot Editor来将任意对象的任意事件挂接到任意的响应函数上面去。
Qt的事件(Signal)机制实在是其中的一个亮点,据称是通过Qt自己的代码生成工具(moc)辅助各种宏来实现类似于动态语言的Reflection机制,从而使得任意相同参数列表的函数都能够通过QObject::connect连接起来。其调用方式类似于C#里面的event,也就是事件的提供者完全不知道接收者的存在,透明的完成事件触发。关于更多这方面的内容我还要再看看更多的资料,现在我也说不清楚。
现在就以Check Box的stateChanged事件为例,写一些简单的代码。
void HelloQtWindows::on_checkBox_stateChanged(int state)
{
if (Qt::Checked == state)
{
QMessageBox::information(this, tr("Test Title"), tr("Checked me!"));
}
else
{
QMessageBox::information(this, tr("Test Title"), tr("Unchecked me!"));
}
}
在这里,响应了Check Box的状态改变事件,当它被选中时弹出对话框显示“Checked me!”,没有被选中时弹出对话框显示“Unchecked me!”。这里的tr是QObject的静态成员函数,是Qt为了多语言化而做的一个很重要的基础设施,关于它的强大功能,等下我来做一个最简单的介绍。
很明显有一个悬而未决的疑问,Qt把那些控件的声明都放在哪里了?看看helloqtwindows.h吧。
#ifndef HELLOQTWINDOWS_H
#define HELLOQTWINDOWS_H
#include <QtGui/QMainWindow>
#include "ui_helloqtwindows.h"
class HelloQtWindows : public QMainWindow
{
Q_OBJECT
public:
HelloQtWindows(QWidget *parent = 0, Qt::WFlags flags = 0);
~HelloQtWindows();
private:
Ui::HelloQtWindowsClass ui;
private slots:
void on_checkBox_stateChanged(int);
};
#endif // HELLOQTWINDOWS_H
对了,就是这个叫做ui的成员变量了!这里的Ui::HelloQtWindowsClass则是窗口设计器自动生成的代码,生成的结果放在Generated Files/ui_helloqtwindows.h里面。比如说实现这样一个功能,当Check Box选中时,将Calendar控件禁用,为选中时启用。
void HelloQtWindows::on_checkBox_stateChanged(int state)
{
if (Qt::Checked == state)
{
QMessageBox::information(this, tr("Test Title"), tr("Checked me!"));
ui.calendarWidget->setEnabled(false);
}
else
{
QMessageBox::information(this, tr("Test Title"), tr("Unchecked me!"));
ui.calendarWidget->setEnabled(true);
}
}
这样就可以了!其中calendarWidget是控件的名字,如果需要修改,应直接在窗口设计器里操作,可千万不要去修改自动生成的代码。
最后我来说说多语言化的问题。Qt有一个叫做QtLinguist的工具可以很方便的实现多语言化,具体操作如下:
-
使用Qt菜单上的Create New Translation File...命令创建一个语言文件,可以选择很多种不同的语言,比如我选择了中文(zh),生成一个helloqtwindows_zh.ts;
-
找到解决方案中的Translation Files/helloqtwindows_zh.ts,在文件上单击右键,选择Open with Qt Linguist...命令,用Qt Linguist打开这个文件;
-
在Qt Linguist里面将每一个句子手动翻译,其中,这些单词正是我用QObject::tr标出的所有句子;
-
保存,然后在main函数中增加下面一段代码:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translator.load("helloqtwindows_zh");
app.installTranslator(&translator);
HelloQtWindows w;
w.show();
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
return app.exec();
}
-
最后,还是在那个ts文件上单击右键,选择Run lrelease命令,生成qm文件,这样再运行程序整个界面就变成中文的了!
程序运行的界面如图所示:
Qt Linguist的界面如图所示:
这里要注意一下,如果程序在源码中修改了任何的内容,在发布之前一定在ts文件上面按右键,选择Run lupdate命令重新生成ts文件,Qt会很智能的把所有内容改变的字符串或新增的字符串更新,在Qt Linguist里面的Context视图中显示为问号,让我们一个都不会漏过。真的是方便到家了!
OK,最简单的Hello world应该到此为止了,这就是今天的全部内容。Qt有一个Qt Assistant,它的功能就像是MSDN一样,提供了所有设施的说明和简单示例,同时还有一个Qt Examples and Demos,它包含很多的Examples,是学习Qt的最好参照物。在网上还可以找到C++ GUIProgramming with Qt4这本书,对Qt的介绍非常的简单明了,很值得一看(我才刚刚开始翻,看完了再给大家介绍)。还有网上的各种资源,灵活使用搜索引擎吧!
相关推荐
一个简单的qt版helloworld程序
QT5.14入门教程GUI(一)第一个QT程序Hello World! QT5.14入门教程GUI(一)第一个QT程序Hello World! QT5.14入门教程GUI(一)第一个QT程序Hello World!
QT4上的HelloWorld程序,包含源码和文档~QT入门资料
简单的qt入门程序 在窗口上显示Hello world
Qt的安装与初步使用,Qt_Creator的安装和hello_world程序的编写
Qt_Creator_的安装和hello_world_程序的编写
如何创建QT项目之QTcreator输出HelloWorld,小白保姆级别的教程,还有提供参考链接. HelloWorld程序是一个基于Qt框架的简单示例程序,用于展示如何使用Qt进行图形界面编程。这个程序的主要目的是在窗口中显示一个...
2.1 编写HelloWorld程序(第1课时) 2.2 程序的运行与发布(第1课时) 2.3 helloworld程序源码与编译过程详解(第2课时) 2.4 项目模式和项目文件介绍(第2课时) 2.5 小结(第2课时)
Qt 编写一个简单程序(hello,world)
本书主要讲述Qt在Linux下的编程基础知识 以红旗LINUX4.1桌面版为例qt-x11-free-3.3.2 目录 前 言 第一章 Qt的安装 第二章 Hello World 第三章 C/C++ 基础
一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator...
1、最简单的QT程序,编码都是从最简单的hello world!的输出开始学起,这就是最简单的QT程序 2、就实现了在界面上输出HelloWorld,学习QT就从这里开始
我们这里的工程名为helloworld。 6.这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以 直接点击Next。 7.我们将base class 选为QDialog 对话框类。然后点击Next。 8.点击Finish,完成工程的...
Qt-CMake-HelloWorld:使用CMake构建的简单Qt5程序
第二章 Hello World 第三章 C/C++ 基础 第四章 窗口部件 第五章 对话框 第六章 主应用窗口程序 第七章 文件与目录处理 第八章 数据库编程 第九章 程序调试与异常处理 附录A:Qt3.0新特性 附录B:Qt3.0类分组列表
作为QT的入门程序。、QFileInfo、QDataStream、QTextStream、QBuff、QPixmap、QImage、QBitmap、QPicture、QTimer定时器…等基本类的使用;基本事件的处理与过滤的学习、信号与槽的学习、QCreator的基本空控件与...
UI界面中有pushbutton,lineEdit,实现按钮按下hello world出现在lineEdit中。
简要介绍Qt的由来、发展历史,Qt4.7.3的安装流程,Hello World的实现。
其实把它放在第一部分并不合适,因为对于一个初学Qt 的人来说一上来就将最好是从一个HelloWorld 程序开始学习比较好。所以推荐初学者从第二部分Qt 学习之路开始阅读。第三部分为Qt 深入编程,对Qt 很熟悉的读者可以...
CORBA的入门级实例代码,Hello World程序。 包括CORBA的一般开发书写过程以及执行步骤(简单英文)。