Qt4_快速设计对话框

本文介绍了如何使用QtDesigner创建和管理Go-to-Cell对话框,包括创建子控件、布局管理、设置tab顺序、信号槽机制以及实现对话框功能。在构造函数中设置输入许可器,并在槽函数中控制Ok按钮的状态。Qt的父子机制确保了对象的正确删除,简化内存管理。
摘要由CSDN通过智能技术生成

创建对话框

我们使用Qt Designer 创建Go-to-Cell 对话框,无论用编写代码的方式还是用Qt Designer,创建对话框都有如下基本的步骤:
1、创建和初始化子控件。
2、把子控件放到布局管理器中。
3、设置tab 顺序。
4、创建信号和槽。
5、实现对话框的自己的槽函数。

在windows 平台Qt 的安装目录的bin 目录下,点击desinger.exe,或者在unix 平台,在命令行上输入designer。当Qt Designer 启动后,它会列出一个控件模板的列表,选择一个模板,进入设计。
在这里插入图片描述

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());
}

setValidator
在构造函数中,我们还创建一个许可器(validator)限制编辑框输入的范围。Qt 提供了三个许可器类: QIntValidator , QDoubleValidator 和QRegExpValidator 。

这里我们使用了QRegExpValidator,使用的表达式为“[A-Za-z][1-9][0-9]{0,2}”这个表达式的意思是第一个字符输入为大写或者小写字母,第二个字符为一个数字范围是1 到9,第三个字符是一个数字范围为0 到9。

在QRegExpValidator 的构造函数中,第二个参数为this,把当前类作为它的父控件,这样就可以不用删除它,父控件析构时可以被自动删除。

on_lineEdit_textChanged()槽函数控制Ok 按钮的可用状态,通过编辑框中的输入字符,如果字符有效Ok 按钮则有效,否则为不可用状态。QLineEdit::hasAcceptableInput()根据我们在构造函数中设置的许可器返回bool 值。

在构造函数的最后两行,把QDialog 的accept()函数连接到OK 按钮的点击信号,把Cancel按钮的点击信号连接到reject()函数。这两个槽函数都关闭这个对话框,但是accept()返回QDialog::Accepted(值为1), reject()返回值为QDialog::Rejected(值为0)。不同的返回值可以判断用户点击了那个按钮。

main.cpp

#include <QApplication>
#include "gotocelldialog.h"
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    GoToCellDialog *dialog = new GoToCellDialog;
    dialog->show();
    return app.exec();
}

在这里插入图片描述
使用qt Designer可以不改变源程序的情况下改变对话框的设计。如果对话框用C++代码编写,改变它将会很费力的。使用Qt Designer,uic 自动重新生成源文件。不会浪费任何时间。

Qt 的父子机制

Qt 的父子机制在QObject 中实现的。当我们创建一个带有父的对象(如一个子控件,一个许可器,布局管理器等)时,父对象把子对象放到自己的子对象列表中。父对象被删除时,它查找自己的子对象并把每一个删除掉。这些子对象再把自己的子对象删除掉,如此递归,知道删除所有对象。

这种父子对象的机制简化了内存管理,减少了内存泄漏的危险。需要程序员删除的对象就是我们使用new 创建的没有父对象的对象。如果我们在父对象存在时删除了它的一个子对象,Qt 将会在父列表中自动删除。(需要记住的是Qt 只是删除有父的对象,父对象还是需要手动删除的,还有就是那些用new 申请的没有指定父的内存,一般情况下,在对话框里的子控件,许可器和布局管理器由Qt 自己管理,其他还要程序员小心删除)

对于控件来讲,父对象还有一个意义:子控件在父对象的显示区域内显示。当父控件删除后,子控件不但在内存中被删除,它也同时在屏幕上消失。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值