Hi,欢迎来到嵌入式培训高端品牌 - 华清远见教育科技集团<北京总部官网>,专注嵌入式工程师培养15年!
当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > 用两种方法教你从零创建Qt对话框程序
用两种方法教你从零创建Qt对话框程序
时间:2017-01-04作者:华清远见

本文用两种方法从零教您实现〈C++ GUI Qt4 编程(第二版)〉上的一个经典案例。

第一种方法是使用Qt Creator来设计对话框的外观,然后手工写代码,实现功能。此方法,对于初学者来说,能够很好的理解Qt程序的基本原理,为深入学习Qt打下一个很好的基础。

第二种方法是完全借助于Qt Creator完成程序。此方法,对于初学者来说,能够快速的完成一个对话框程序,从而激发出学者才兴趣。

一、 Qt Creator仅用来设计Form外观

1) 创建窗体

FileànewàQt Designer FormàWidget 
        选择路径 
        命名为gotocelldialog.ui

2) 创建子窗口部件

文本标签:objectName的属性是”label”,text的属性是”&Cell Location”
        行编辑器:objectName—lineEdit 
        按钮: objectName—okButton, enabled—false, text—OK, default—true
        按钮: objectName—cancelButton, text—Cancel, 
        选中窗体: objectName—GoToCellDialog, windowTitle—Go to Cell
        插入分隔符 
        EditàEdit Buddies,单击标签并把红色箭头拖到行编辑器中

3) 摆放窗体部件

选择label和lineEdit ,单击FormàLay Out Horizontally
        选择分隔符、OK按钮和Cancel按钮,单击FormàLay Out Out Horizontally
        单击窗体中空白处,取消对所有已选中项的选择,单击FormàLay Out Vertically
        单击FormàAdjust Size, 重新把窗体的大小定义为佳形式

4) 设置Tab键顺序

可以按照你所希望的接受焦点的顺序,单击每一个窗口部件,然后点击Edt-->Edit Widgets,离开Tab键顺序设置模式。

5) 在同一目录下创建main.cpp,内容如下:

QApplication app(argc, argv);
        Ui::GoToCellDialog ui;
        QDialog *dialog = new QDialog;
        ui.setupUi(dialog);
        dialog->show();
        return app.exec();

6) 用命令行的方式,执行qmake命令,将生成pro文件和Makefile文件

qmake -project -o gotocelldialog.pro

7) 为对话框添加功能

创建一个新类,使其同时从Qdialog和Ui::GoToCellDialog中继承,命名惯例是:将该类与uic所生成的类具有相同的名字,只是没有Ui::前缀而已。

创建gotocelldialog.h文件
        #ifndef GOTOCELLDIALOG_H
        #define GOTOCELLDIALOG_H 
        #include <QDialog>
        #include "ui_gotocelldialog.h"
        class GoToCellDialog : public QDialog, public Ui::GoToCellDialog 
        {
                Q_OBJECT
        public:
                GoToCellDialog(QWidget *parent = 0);
        private slots:
                void on_lineEdit_textChanged();
        };
        #endif

创建gotocelldialog.cpp文件 
        include <QtGui>
        #include "gotocelldialog.h”
        GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent)
        {
                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()));
        }
        void GoToCellDialog::on_lineEdit_textChanged()
        {
                okButton->setEnabled(lineEdit->hasAcceptableInput());
        }

8) 重写main.cpp

QApplication app(argc, argv);
        GoToCellDialog *dialog = new GoToCellDialog;
        dialog->show();
        return app.exec();

9) 运行程序 
        ctrl+r
        或者 
        qmake –project –o gotocelldialog.pro
        qmake 
        ./gotocelldialog

二、直接用Qt Creator 创建Gui工程

1) 建立GUI工程

●    File-->new-->Qt4 Gui Application
        ●   选择路径 
        ●   命名为gotocelldialog.pro
        ●    选择基类Qdialog, 类名GoToCellDialog,

2)3)4)步骤同前

5) 修改gotocelldialog.cpp中的构造函数GoToCellDialog

ui->lineEdit->setValidator(new QRegExpValidator(regExp, this));
        connect(ui->okButton, SIGNAL(clicked()), this, SLOT(accept()));
        connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
        备注:此时访问部件,需要通过指针ui。

6) 修改gotocelldialog.h,在类中加入自定义的槽函数原型

private slots:
        void on_lineEdit_textChanged()

7) 在gotocelldialog.cpp中加入实现

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

备注:本文的部分内容参考了〈C++ GUI Qt4 编程(第二版)〉,特此声明,并表示感谢。

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)