四、Go To Cell(Qt5 GUI系列)


目录

一、设计需求

二、实现代码

三、代码解析

四、总结


一、设计需求

        在一些表格类的项目中通常都有定位单元格的需求。本文就设计一个定位单元格的对话框,要求对输入进行限制(允许第一个字元输入大小写英文字母,后面接一位非0数字,再接0~2位可为0的数字)。

二、实现代码

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    
private:
    Ui::Dialog *ui;

private slots:
    void on_lineEdit_textChanged();
};

#endif // DIALOG_H
#include "dialog.h"
#include <QRegExpValidator>
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    //设置UI界面函数,用于将UI界面组件和逻辑连接起来
    ui->setupUi(this);

    //QRegExp 是一个用于正则表达式匹配的类
    //允许第一个字元输入大小写英文字母,后面接一位非0数字,再接0~2位可为0的数字
    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
    //设置校验器
    ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));

    //将OK按钮的clicked()信号连接至QDialog的accept()槽函数
    connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accept()));
    //将cancel按钮的clicked()信号连接至QDialog的reject()槽函数
    connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
}

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

//检测lineEdit内容改变的槽函数
void Dialog::on_lineEdit_textChanged()
{
     //根据QLineEdit中的输入是否合法,来设置OK按钮是否可用
     ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}

Ui设计:

设定布局

 设定伙伴

设定Tab顺序

效果展示:

三、代码解析

(1)setupUi()
        setupUi 函数会将各个界面组件进行初始化,设置它们的属性和样式,以及建立信号和槽的连接关系。通过调用 setupUi 函数,我们可以快速设置和初始化UI界面,使其能够显示和响应用户操作。
        需要注意的是,我们需要把界面的设置(代码上对控件的编辑)放在 setupUi 函数的后面。因为setupUi 函数是由Qt工具自动生成的,并负责将界面组件初始化并进行布局(由Qt Designer编辑的控件和属性)。在调用 setupUi 函数之前,界面组件还没有被创建或初始化,因此在该函数之前进行设置的操作可能会被覆盖或无效。

(2)accept()、reject()
        两个槽函数都会关闭 Dialog视窗,但是accept()会设定 Dialog 的结果至 QDialog::Accepted (结果设为 1),而 reject0)则会设定为QDialog::Rejected(结果设为),因此可以根据这个结果来判断按下的是“OK”按钮还是“Cancel”按钮。如下:

QDialog dialog;
// 执行对话框,并等待其关闭后返回结果
int result = dialog.exec();
// 根据返回值进行相应的处理
if (result == QDialog::Accepted) {
    // 用户点击了确认按钮,执行相应的操作
} else if (result == QDialog::Rejected) {
    // 用户点击了取消按钮,执行相应的操作
}

        上面接收反的是模态对话框的返回值。exec()会阻塞,直到结束对话框。如果想要接收非模态对话框的返回值可以利用信号槽机制或者重写重写QDialog::closeEvent() 函数。

四、总结

        本文中定位单元格的例子虽然功能比较单一、代码比较简单,但是涉及到知识点比较广泛。控件与控件的伙伴关系、布局、Tab键的顺序、检验器等知识点。这些知识可以使得界面更加优美和方便。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值