这几天,由于几门考试,再加上挑战杯全国总决赛的事,我不得不将活停了下来!现在烦心的事基本都过去了,继续!以前考试对我来说不重要,现在不一样了,已经保研了,如果挂一门的话,就竹篮打水一场空了!
在用QTCreator开发程序时,工程目录不能有空格和汉字.
QT的版本管理:
QT_creator 允许同时安装多个版本,并且很容易的进行版本切换。
Qt Creator 可以自动选择在系统环境变中的版本,我们如果觉得系统环境变量中的QT版本已经合适了,就不用做任何版本切换操作。否则,可以添加其他版本,通过Tools -> Options... -> Qt Versions。如果,在windows平台上用MinGW来编译QT,就需要告诉Qt Creator MinGW的目录。同过Tools -> Options... -> Qt4 -> Qt Versions -> MinGw Directory来设置MinGW的目录。
一旦在windows上安装Qt Creator,安装程序会自动将系统环境变量配置好,一般不用再手动配置系统环境变量。如果系统环境变量中没有设置QT的变量,可以同过Tools ->Options来设置系统环境变量。
新建默认的工程,需要默认的Qt版本进行编译。
写一个简单的qt例程——文本查找例程(Text Finder):
第一步:建立新工程
新建一个Qt4 Gui Application,选择QWidget作为Text Finder的基类。在类名中输入textfinder,点击确定。最后生成5个文件,分别是:
textfinder.pro
textfinder.ui
textfinder.h
textfinder.cpp
main.cpp
第二步:设计界面,并生成相应的代码,并实现查找功能
2.1 设计用户界面(在这里提一下,我私人觉得QT的界面比MFC的好多了!)
在工程浏览窗口中双击textfinder.ui,就会弹出界面设计窗口。
如上图,用一个QLabel,QLineEdit取名lineEdit,QPushButon取名findButton,QTextEdit取名textEdit。用一个QGridLayout来布局QLabel,QLineEdit和QTextEdit。用一个QVBoxLayout将QTextEdit和QGridLayout布局好。
设计完之后如下图所示(怎么样?是比MFC强多了吧!呵呵):
接下来处理头文件,textfind.h文件中已经有一些必须的代码,例如,includes,a constructor,a destructor,及Ui对象等。我们需要添加私有的槽(slot), on_findButton_clicked()来处理find操作。还要添加一个私有的函数loadTextFile()来读和显示QTextEdit的内容。代码如下:
private slots:
void on_findButton_clicked();
private:
Ui::TextFinder *ui;
void loadTextFile();
2.3 处理源文件
我们首先将textfinder.cpp中的loadTextFile()函数实现,代码片段如下:
void TextFinder::loadTextFile()
{
QFile inputFile(":/input.txt");
inputFile.open(QIODevice::ReadOnly);
QTextStream in(&inputFile);
QString line = in.readAll();
inputFile.close();
ui->textEdit->setPlainText(line);
QTextCursor cursor = ui->textEdit->textCursor();
cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
}
上面代码中我们打开文本文件用到了QFile,读文本用到了QTextStream,将文本显示到textEdit上用到了setPlainText().所以在textfinder.cpp中要包含QFile和QTextStream,如下所示
#include <QtCore/QFile>
#include <QtCore/QTextStream>
2.4 对槽的处理
在槽 on_findButton_clicked()中,我们用find()函数查找要找的字符串。代码片段如下:
void TextFinder::on_findButton_clicked()
{
QString searchString = ui->lineEdit->text();
ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
}
最后,我们完成了以上的函数之后,需要在构造函数中调用loadTextFile(),代码如下所示:
TextFinder::TextFinder(QWidget *parent)
: QWidget(parent), ui(new Ui::TextFinder)
{
ui->setupUi(this);
loadTextFile();
}
对于槽的使用,需要一个ui_textfinder.h文件,这个文件是编译时界面文件产生的,在编译之前是没有这个文件的,并且textfinder.cpp中 include"ui_textfinder.h"也提示找不到 ui_textfinder.h文件。当编译之后,生成了ui_textfinder.h时,这个问题就消失了!
第三步:添加资源文件
到上面,编译可以通过,但是编译完之后不能运行,提示"Exited with code 0."。估计就是由没有添加文本文件“input.txt”造成的。
接下来就逐步添加资源文件:
单击 file->new->Resource file->OK. 在name栏中输入"textfinder.qrc",
单击"next",
单击"Finish" 。
在工程窗口中双击 “textfinder.pro”, 单击右侧的“Add”->"Add Prefix"。设置好prefix的目录,然后单击“Add”->"Add Files",添加相应的资源文件就可以了。
第四步:编译运行
完工!!!