Trolltech近日刚刚发布了QT4,它和QT3有较大的不同,同时For Windows的OpenSource版本也推出了,广大C++爱好者可以在Windows下也方便地使用它了。
第一步,先安装它
在Trolltech的官方网站上,可以下载到For windows和MingW的安装文件:
或者,到本论坛的下面网址去下载:
因为我们将使用MingW来作为编译器。
下载完后,直接安装,如果您已经安装了MingW(比如Dev-C++就有MingW),则在安装过程中指定MingW的位置,如果没有安装,则选择现在下载,安装过程会自动下载并安装。
安装完成后。就可以使用了。
MinGW的安装,您可以到官方网站下载:
第二步,安装完后,就可以使用了。我们先用QT Designer设计一个窗体。
OpenSoruce版本的QT Designer功能比较的简单,只能设计窗体布局以及连接已有的信号与槽,这给我们带来了许多的不便(有For Windows的OpenSource版本使用已经很不错啦)
先用QT Designer设计一个窗体,设定可以设定的信号连接,然后把它保存为一个.ui文件
,比如form1.ui
然后,打开QT Command prompt控制台,切换到保存.ui文件的那个目录下面,然后运行下面命令:
QUOTE:
uic form1.ui > form1.h
这是,大家会看到下面的代码:
QUOTE:
#ifndef UNTITLED_H
#define UNTITLED_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
class Ui_MainWindow
{
public:
QWidget *centralWidget;
QGridLayout *gridLayout;
QPushButton *pushButton_2;
QLineEdit *lineEdit;
QPushButton *pushButton;
QListWidget *listWidget;
void setupUi(QMainWindow *MainWindow)
{
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(QSize(218, 294).expandedTo(MainWindow->minimumSizeHint()));
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
gridLayout = new QGridLayout(centralWidget);
gridLayout->setSpacing(6);
gridLayout->setMargin(8);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
pushButton_2 = new QPushButton(centralWidget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
gridLayout->addWidget(pushButton_2, 2, 1, 1, 1);
lineEdit = new QLineEdit(centralWidget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
gridLayout->addWidget(lineEdit, 1, 0, 1, 2);
pushButton = new QPushButton(centralWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
gridLayout->addWidget(pushButton, 2, 0, 1, 1);
listWidget = new QListWidget(centralWidget);
listWidget->setObjectName(QString::fromUtf8("listWidget"));
gridLayout->addWidget(listWidget, 0, 0, 1, 2);
MainWindow->setCentralWidget(centralWidget);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow"));
pushButton_2->setText(QApplication::translate("MainWindow", "PushButton"));
pushButton->setText(QApplication::translate("MainWindow", "PushButton"));
Q_UNUSED(MainWindow);
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
#endif // UNTITLED_H
我并不喜欢上面的自动生成的代码,我要对它进行一下整理,同时加上自己的控制
form1.h
QUOTE:
#ifndef FORM1_H
#define FORM1_H
#include
#include
#include
#include
#include
class Form1: public QMainWindow
{
Q_OBJECT
public:
Form1();
public slots:
void insertItem();
public:
QWidget *centralWidget;
QGridLayout *gridLayout;
QLineEdit *lineEditString;
QPushButton *pushButton_Quit;
QPushButton *pushButton_Insert;
QListWidget *listWidgetList;
};
#endif // FORM1_H
form1.cpp
QUOTE:
#include
#include
#include "form1.h"
Form1::Form1()
{
this->resize(QSize(194, 323).expandedTo(this->minimumSizeHint()));
centralWidget = new QWidget(this);
gridLayout = new QGridLayout(centralWidget);
gridLayout->setSpacing(6);
gridLayout->setMargin(8);
lineEditString = new QLineEdit(centralWidget);
gridLayout->addWidget(lineEditString, 1, 0, 1, 2);
pushButton_Quit = new QPushButton(tr("Quit"), centralWidget);
gridLayout->addWidget(pushButton_Quit, 2, 1, 1, 1);
pushButton_Insert = new QPushButton(tr("Insert"), centralWidget);
gridLayout->addWidget(pushButton_Insert, 2, 0, 1, 1);
listWidgetList = new QListWidget(centralWidget);
gridLayout->addWidget(listWidgetList, 0, 0, 1, 2);
this->setCentralWidget(centralWidget);
QObject::connect(pushButton_Quit, SIGNAL(clicked()), this, SLOT(close()));
QObject::connect(pushButton_Insert, SIGNAL(clicked()), this, SLOT(insertItem()));
setWindowTitle(tr("Test Program"));
}
void Form1::insertItem()
{
QString strInsert = lineEditString->text();
if (strInsert.isEmpty())
{
QMessageBox::warning(this, tr("Alert"),
tr("You have not input any character"),
tr("OK"));
lineEditString->setFocus();
}
else
{
listWidgetList->addItem(lineEditString->text());
lineEditString->clear();
}
}
再加上一个主函数
main.cpp
QUOTE:
#include
#include
#include "form1.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
Form1 form1;
form1.show();
return app.exec();
}
这样,我们就写完一个基本的函数了,但,我们要加入多语言支持的,现在还不行。于是,修改主函数:
QUOTE:
#include
#include
#include "form1.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QTranslator translator;
translator.load(QString("ex5_") + QString(argv[1]));
app.installTranslator(&translator);
Form1 form1;
form1.show();
return app.exec();
}
我们用参数,控制程序使用哪种语言.
接下来,就需要翻译了,
打开控制台,用lupdate命令生成.ts文件
QUOTE:
lupdate form1.cpp -ts ex5_en.ts
我们再把上面的ex5_en.ts文件复制两份,分别命名为ex5_zh_CN.ts和ex5_zh_TW.ts,再下来,我们就可以使用Qt Linguish翻译工具,来翻译我们想要的语言了。
翻译完这三个.ts文件后,把他们保存了,并且发布了(也就是运行菜单lrelease命令,它会生成.ts对应的qm文件)。
再接下来,就需要生成工程文件了。
在控制台下运行下面命令:
QUOTE:
qmake -project
完成后,它就会生成下面内容的文件:
QUOTE:
######################################################################
# Automatically generated by qmake (2.00a) ??? ?? 30 20:57:58 2005
######################################################################
TEMPLATE = app
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += form1.h
SOURCES += form1.cpp main.cpp
TRANSLATIONS += ex5_en.ts ex5_zh_CN.ts ex5_zh_TW.ts
然后,运行qmake命令生成Makefile文件,再运行make命令,来进行编译
QUOTE:
qmake
make
编译完成后,就会在Release目录下面生成ex5.exe文件,把它拷贝到上层目录中,在控制台上运行下面命令就可以产生相应语言的界面效果了
QUOTE:
ex5 zh_CN
ex5 zh_TW
ex5 en