快速设计对话框

需要5个基本步骤:

1、创建并初始化子窗口部件

2、把子窗口部件放到布局中

3、设置TAB顺序

4、建立信号-槽之间的连接

5、实现对话框中自定义槽


在QT中要用到qt设计师,首先建立一个项目,然后在项目里面可以新建一个文件夹,比如取名为UI,在里面可以存放界面文件

1、可以在qt设计师下面直接设计,然后保存在UI文件夹下面,右键添加现有文件,就能够把界面导入到工程中

2、直接右键添加新文件,设置好路径,选择QT设计师类而不是只有界面

要在main中包含.h文件,比如:

#include "ui/gotocelldialog.h"
执行:

    GotoCellDialog w;
    w.show();

QT中选择release版本,debuge速度太慢,此外不要选择shade build,否则再次编译会有问题

如果把ui文件夹删除,那么要重新构建, 此外必须将.pro文件重新修改才行


注:QT中的信号函数是不需要给出函数体实现的,里面的参数是用来传递给槽的,用emit可手动进行发射信号。可以认为信号函数是采用回调函数来实现的,此外信号函数跟槽函数里面的参数顺序还有类型一般是相同的,如果信号函数里面的参数比较多,多余的可以不用!


QT设计师中的体会:

跟Java类似,可以直接拉动控件,先对子窗口进行改动

有四种基本操作模式:1、编辑控件F3  2、编辑信号槽F4  3、编辑伙伴   4、编辑TAB顺序

两个控件声明为伙伴,那么拥有共同的焦点,一般是将Label和edit声明为伙伴,那么当点击ALT+快捷键的时候能够转到相应的控件。


界面为:


1、当将Label与lineedit设置为伙伴后,Cell前面的&就消失

2、设置布局时,先将布局拉近窗体,然后在将子窗口拉进去,而不是选择两个控件然后设置布局,这样子选择的顺序不同可能会有问题

添加分隔符能够对布局里面的窗体进行相应的设置,分隔符只是起辅助作用。

3、设计完界面后,QT会自动生成ui_gotocelldialog.h文件,然后在高版本的QT是不进行显示的,


QT会为设计师所设计的类生成新的文件:

gotocelldialog.h

#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H

#include <QDialog>


namespace Ui {
class GotoCellDialog;
}

class GotoCellDialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit GotoCellDialog(QWidget *parent = 0);
    ~GotoCellDialog();

private slots:
    void on_lineEdit_textChanged();
    
private:
    Ui::GotoCellDialog *ui;
};

#endif // GOTOCELLDIALOG_H
可以看出,使用
namespace Ui

{
class GotoCellDiag;

}

避免名称冲突,使用class GotoCellDiag进行前置声明

设计一个与界面类相同的名字GoToCellDialog但是是不同的作用域,继承自QDialog

Ui::GotoCellDialog *ui; 将界面类设置为私有,可以对里面的元素进行访问

gotocelldialog.cpp

#include "gotocelldialog.h"
#include "ui_gotocelldialog.h"
//父-子对象机制是在QObject中实现的
GotoCellDialog::GotoCellDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::GotoCellDialog)
{
    //初始化窗体
    ui->setupUi(this);
    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    //让它称为gotocell的子对象 删除父对象时就会自动被删除
    ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));
    connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accept()));
    connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
    //信号中多余的参数可以不使用  改为textChanged也是正确的
    //on_objectName_signalName  会自动进行信号的链接,而省去写connect的麻烦
    // connect(ui->lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(on_lineEdit_textChanged()));
}
GotoCellDialog::~GotoCellDialog()
{
    delete ui;
}
//connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(on_lineEdit_textChanged()));
void GotoCellDialog::on_lineEdit_textChanged()
{
    ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}
在头文件就包含了 
"ui_gotocelldialog.h"
因为对其元素进行必要的访问


构造函数的初始化,为基类和成员对象进行初始化

GotoCellDialog::GotoCellDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::GotoCellDialog)
ui->setupUi(this)   初始化窗体部件 以this作为父窗口


qt中的校验器:

    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    //让它称为gotocell的子对象 删除父对象时就会自动被删除
    ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));

校验器:点击打开链接

正则表达式:点击打开链接


main.cpp:

#include "mainwindow.h"
#include <QApplication>
#include "ui/gotocelldialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GotoCellDialog w;
    w.show();
    return a.exec();
}











 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值