做个查找窗口界面。
创建一个目录,名为 myfind
cd /root/learn/qt4
mkdir myfind
cd myfind
打开 qt4 designer 点击菜单 Applications -> Programming -> Qt4 Designer 在 New Form 窗口里选择 Widget,如下图所示
拖放以下几个控件放入 Form 里,如下图所示:
从上至下,从左至右依次放的是:
Label, Line Edit, Horizontal Spacer, Push Button, Push Button
修改一下它们的属性 把 Form 的 text 改为 Find Text,把它的 objectName 改为 FormFindText 把 label 的 text 改为 Text to find 把两个按钮的 objectName 分别改为 pbnOK, pbnCancel,并把它们的 text 属性分别改为 OK,Cancel
添加 Layout 选中 label 和 lineEdit,选择菜单 Form -> Lay Out Horizontally 选中 Horizontal Spacer 和那两个按钮,选择菜单 Form -> Lay Out Horizontally 然后什么都不选,右键点击窗体空白处,选择菜单 Lay out -> Lay Out Vertically 如下图所示
保存窗体
点 File -> Save Form,把它存到 myfind 目录里,命名为 myfinddialog.ui。
编写启动函数(main)
打开 KDevelop,在 myfind 目录中新建文件 myfind.cpp,输入如下代码:
#include <QApplication>
#include <QDialog>
#include "ui_myfinddialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Ui_FormFindText ui;
QDialog *dialog = new QDialog;
ui.setupUi(dialog);
dialog->show();
return app.exec();
}
编译运行
cd /root/learn/qt4/myfind
qmake-qt4 -project
qmake-qt4
make
./myfind 会得到下面的窗口:
加入几个事件
下面实现这个功能:当文本框中有输入的时候才让 OK 按钮有效,默认认它无效。
先把 pbnOK 按钮的 enabled 属性设置为 false,把 default 设为 true,然后加入 myfinddialog.h 和 myfinddialog.cpp,源代码分别如下所示:
// myfinddialog.h
#ifndef MY_FINDDIALOG___H
#define MY_FINDDIALOG___H
#include <QDialog>
#include "ui_myfinddialog.h"
class MyFindDialog : public QDialog, public Ui_FormFindText
{
Q_OBJECT
public:
MyFindDialog(QWidget *parent = 0);
private slots:
void on_textChanged();
};
#endif
// myfinddialog.cpp
#include <QtGui>
#include "myfinddialog.h"
MyFindDialog::MyFindDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
connect(pbnOK, SIGNAL(clicked()), this, SLOT(accept()));
connect(pbnCancel, SIGNAL(clicked()), this, SLOT(reject()));
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(on_textChanged()));
}
void MyFindDialog::on_textChanged()
{
pbnOK->setEnabled(lineEdit->hasAcceptableInput());
}
修改启动函数内容
如下所示
#include <QApplication>
#include "myfinddialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyFindDialog dialog;
dialog.show();
return app.exec();
}
重新编译运行
使用 qmake-qt4 重新生成工程文件 *.pro 和 makefile 文件,编译运行,随便在文本框里输入些东西,观察效果。