论坛首页 编程语言技术论坛

QT实例精析

浏览 6195 次
锁定老帖子 主题:QT实例精析
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-01  
C++

这篇文章,教你怎么用Qt Creator2.0来做一个GUI。

下载地址什么的不罗嗦,google之。

我这里给出的,是每个QT GUI 工程用QT creator来做时的流程。

 

假设你已经安装好了qt sdk。

 

1.文件->新建工程或文件。

 

2.选择Qt控件项目->QT GUI应用。

 

 

 

3.取消 “隐藏生成的文件选项”

 

4.布局ui文件

(这步的详细操作略去,很多书都会说这个,我只说书上说得不清楚的)

 

5.编译该ui文件,这时,会出现一个ui_xxx.h的文件。

 

接下来,就是代码修改了。这里分别给出原始文件和修改后的文件内容。代码注释在修改后的文件上。

 

以建立一个叫test的工程为例,修改后的工程,可以执行对话框的功能。

 

一、首先修改test.h

test.h未修改前代码:(需要说明的是,我的修改前代码和你的可能不同,不过没影响)

 

#ifndef TEST_H
#define TEST_H

#include <QMainWindow>

namespace Ui {
    class test;
}

class test : public QMainWindow
{
    Q_OBJECT

public:
    explicit test(QWidget *parent = 0);
    ~test();

private:
    Ui::test *ui;
};

#endif // TEST_H

 

 

修改后的test.h代码

 

#ifndef TEST_H
#define TEST_H

#include <QDialog> //因为要继承QDialog
#include "ui_test.h" //引用了ui_test.h,ui_test.h文件不能做任何更改,即使做了更改,在再次编译test.ui的时候,这些更改都会消失


class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
//这里声明的class名,惯例是使用Ui后面的名字
//为什么要继承QDialog?因为ui_test.h中定义的Ui::GoToCellDialog函数,没有完全继承QDialog的特性,接下来的操作中,还有可能用到
{
    Q_OBJECT//如果有声明signals, slots,则必须写这一句,这样qt的编译器才能识别下面的这些生命

public:
    explicit GoToCellDialog(QWidget *parent = 0);//典型的窗口部件类定义中的构造函数,注意定义方式,没有必要关联基类
    //QWidget * parent参数用于说明谁是其父窗口部件,该参数的默认值是一个空指针,意味着该对话框没有父对象
    ~GoToCellDialog();//析构函数,可选,如果在这里声明,就必须实现

 private slots:
    void on_lineEdit_textChanged();//注意这种slots的函数名书写方式
    //创建用户接口后,setupUi函数会自动将那些符合on_objectName_signalName()的任意slot与相应的objectName的signalName()连接
    //这里,就意味着,如果实现用户接口,就会自动运行如下代码
    //connect(lineEdit, SIGNAL(testChanged(const QString &)), this, SLOT(on_lineEdit_textChanged()));
};

#endif // TEST_H

 

 

二、接下来修改test.cpp代码

test.cpp未修改前代码

#include "test.h"
#include "ui_test.h"

test::test(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::test)
{
    ui->setupUi(this);
}

test::~test()
{
    delete ui;
}

 

 

test.cpp修改后代码

 

#include <QtGui>
#include "test.h"

//现在开始实现test.h,这里,test.h中的类已经是通过继承的类了。注意这个文件include的文件
GoToCellDialog::GoToCellDialog(QWidget *parent) :
    QDialog(parent)//注意实现方式,parent参数传递给了基类构造函数,
{
    //子类的构造函数,可以看出,GUI程序的界面设计和功能实现,都是在构造函数中完成的。
    setupUi(this);//这里开始初始化自己

    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
    connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
    //accept(),reject()槽都是QDialog的槽,这两个槽都可以关闭对话框,并且会设置对话框的值
    //QDialog::Accepted, QDialog::Rejected
}

void GoToCellDialog::on_lineEdit_textChanged()
{
    okButton->setEnabled(lineEdit->hasAcceptableInput());
}

GoToCellDialog::~GoToCellDialog()
{
    //todo
}

 

 

三、修改main.cpp代码

 

main.cpp修改前代码

 

#include <QtGui/QApplication>
#include "test.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    test w;
    w.show();

    return a.exec();
}

 

 

main.cpp修改后代码

#include <QApplication>

#include "test.h"
//这里没啥好解释的...
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GoToCellDialog *dialog = new GoToCellDialog;//看下这个继承类的构造函数,注意这里采用默认参数0,即没有父类
    dialog->show();

    return a.exec();
}

 

然后编译运行,搞定。

 

可以说,基本上每个QT GUI工程都是按照这个来做的。修改后的代码执行一个对话框的功能。

   发表时间:2012-05-09  
QT 挺好用。
请问,现在用的多吗;我一直都是闭门造车,还没有在项目中用过。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics