Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1066382
  • 博文数量: 226
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2504
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-21 14:12
文章分类

全部博文(226)

文章存档

2011年(1)

2010年(2)

2009年(68)

2008年(4)

2007年(27)

2006年(124)

我的朋友

分类: C/C++

2006-11-06 17:43:11

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



阅读(1897) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~