前言
学一个东西必须得去实践,而且如果实践出来的东西还有趣味性的话,会大大增加学习的动力。我刚接触Qt不久,准备在自学的过程中把自己写的实例一一记录下来。
好了,不扯了,今天要做一个查找框,就是大家用的编辑器里的那种最普通的查找框,先看下效果图大概是啥样的:
好,看完了我们开始做。至于Qt的安装这里就不赘述了,度娘会告诉你,而且也不算复杂。
1.建立项目填写项目位置,随便起个都行。这里就叫dialog吧。下一步,下一步。来到编辑类信息的时候,修改基类为QDialog,类名为FindDialog,把创建界面那个勾去掉,下一步,完成。打开Qt Creator,文件-新建,选择Qt控件项目-Qt Gui应用,确定。
这时候我们可以看下里面都有什么文件:
有个.pro文件,还有个.h头文件,还有两个cpp源文件。
打开.pro文件你可以看到里面保存的是一些配置信息。
dialog.cpp里面是类的声明。
main.cpp是程序的主入口,他把dialog.h头文件包含了进来,然后实例化,显示,然后从那句a.exec()开始进入事件循环。
2.添加组件
好了,我们建好相应的文件现在开始写代码吧,你不会是以为现在就大功告成了吧?哈哈。。。你可以点击那个绿色的播放按钮运行看看,可能是类似这个样子的(不同的操作系统样子不同):
里面什么东西都没有,那。。。都要写什么呢?想下查找框都有什么部件?有文字,有文本框,有按钮,差不多就这几个。
修改dialog.h文件:
#ifndef FINDDIALOG_H#define FINDDIALOG_H#include//先声明需要用到的组件,告诉编译器这些类是存在的,而不必关注太多细节。class QLabel;//文字class QLineEdit;//文本框class QPushButton;//按钮class QHBoxLayout;//用于布局的层class FindDialog : public QDialog{ Q_OBJECT public: FindDialog(QWidget *parent = 0);//构造函数 ~FindDialog();//析构函数private: //前置声明一些部件 QLabel *searchLabel; QLineEdit *searchLineEdit; QPushButton *searchButton; QHBoxLayout *layout; void init();};#endif // FINDDIALOG_H
dialog.cpp:
#include "finddialog.h" //把需要用到的组件加进来 #include#include #include #include FindDialog::FindDialog(QWidget *parent) : QDialog(parent)//构造函数{ init();//初始化}FindDialog::~FindDialog()//析构函数{ }void FindDialog::init(){ //一个文本标签,内容用tr包起来是为了方便国际化 searchLabel = new QLabel(tr("&Find what?")); //一个文本框 searchLineEdit = new QLineEdit(); //设置伙伴,当使用searchLabel的快捷键时,会自动focus到searchLineEdit上 searchLabel->setBuddy(searchLineEdit); //搜索按钮 searchButton = new QPushButton(tr("&Search")); //new一个水平层,把组件都加进去 layout = new QHBoxLayout; layout->addWidget(searchLabel); layout->addWidget(searchLineEdit); layout->addWidget(searchButton); //设置主layout为layout setLayout(layout); //到此为止我们把部件都加进去了}
main.cpp不用改了,Qt Creator已经为我们写好了。此时我们点击绿色播放按钮。就可以看到先前的效果图啦。:)
怎么样?用Qt写控件很简单吧?不过点击搜索按钮还没有任何反应,只有关闭按钮才起反应,而且也没有内容可搜索,还有,那个tr怎么实现国际化?那么下一节我们就去实现这些功能吧!