进制转换小程序V1.1版本 使用Qt

介绍了进制转换小程序V1.1版本,该程序未在函数中严格检查输入字符串合法性,而是用正则表达式严格匹配输入。实现部分涉及使用QRegExp类和QRegExpValidator类处理正则表达式,以及四个槽函数响应鼠标点击操作。程序界面和功能简单,还提及相关文件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进制转换小程序V1.1版本
写在开始,这段程序没有严格检查输入的字符串是否合法,在函数中没有检查,只是通知正则表达式来进行严格匹配输入,如果输入有误,不会让输入非法字符。算是投机取巧的个种做法。

实现部分需要说明:
1.正则表达式的使用,使用QRegExp类实现正则表达式,使用QRegExpValidator类,将正则表达式设置到lineEdit类中。
2.使用四个槽函数,将鼠标点击的输入使用槽函数响应客户操作。

程序界面相对简陋,功能也相对简单,纯属练习。
这里写图片描述

finddialog.h 头文件实现

#ifndef FINDDIALOG_H
#define FINDDIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QString>
#include <QDebug>

class FindDialog : public QDialog
{
    Q_OBJECT
private:
    //10进制
    QLabel* ten_label;
    QLineEdit* ten_lineEdit;
    QPushButton* ten_button;

    //8进制
    QLabel* oct_label;
    QLineEdit* oct_lineEdit;
    QPushButton* oct_button;

    //16进制
    QLabel* hex_label;
    QLineEdit* hex_lineEdit;
    QPushButton* hex_button;

    //2进制
    QLabel* bin_label;
    QLineEdit* bin_lineEdit;
    QPushButton* bin_button;

public slots:
    bool on_tenButton_clicked();
    bool on_hexButton_clicked();
    bool on_octButton_clicked();
    bool on_binButton_clicked();

public:
    FindDialog(QWidget *parent = 0);
    ~FindDialog();
};

#endif 

finddialog.cpp文

#include "FindDialog.h"
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QRegExp>
#include <QRegExpValidator>

FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{
    ten_label = new QLabel(tr("10 Decimal:"));
    ten_label->setAlignment(Qt::AlignRight);
    ten_lineEdit = new QLineEdit;
    QRegExp ten_reg("[0-9]{0,}");
    ten_lineEdit->setValidator(new QRegExpValidator(ten_reg,this));
    ten_button = new QPushButton;
    ten_label->setBuddy(ten_lineEdit);
    ten_button->setText(tr("10 >"));

    oct_label = new QLabel(tr("8 Decimal:"));
    oct_label->setAlignment(Qt::AlignRight);
    oct_lineEdit = new QLineEdit;
    QRegExp oct_reg("[0-7]{0,}");
    oct_lineEdit->setValidator(new QRegExpValidator(oct_reg,this));
    oct_button = new QPushButton;
    oct_label->setBuddy(oct_lineEdit);
    oct_button->setText(tr("< 8 >"));

    hex_label = new QLabel(tr("16 Decimal:"));
    hex_label->setAlignment(Qt::AlignRight);
    hex_lineEdit = new QLineEdit;
    QRegExp hex_reg("[0-9a-eA-E]{0,}");
    hex_lineEdit->setValidator(new QRegExpValidator(hex_reg,this));
    hex_button = new QPushButton;
    hex_label->setBuddy(hex_lineEdit);
    hex_button->setText(tr("< 16 >"));

    bin_label = new QLabel(tr("2 Decimal:"));
    bin_label->setAlignment(Qt::AlignRight);
    bin_lineEdit = new QLineEdit;
    QRegExp bin_reg("[0-1]{0,}");
    bin_lineEdit->setValidator(new QRegExpValidator(bin_reg,this));
    bin_button = new QPushButton;
    bin_label->setBuddy(bin_lineEdit);
    bin_button->setText(tr("< 2"));


    QGridLayout* glayout = new QGridLayout;
    glayout->addWidget(ten_label,0,0);
    glayout->addWidget(ten_lineEdit,0,1);
    glayout->addWidget(oct_label,1,0);
    glayout->addWidget(oct_lineEdit,1,1);
    glayout->addWidget(hex_label,2,0);
    glayout->addWidget(hex_lineEdit,2,1);
    glayout->addWidget(bin_label,3,0);
    glayout->addWidget(bin_lineEdit,3,1);

    QHBoxLayout* hboxLayout = new QHBoxLayout;
    hboxLayout->addWidget(ten_button);
    hboxLayout->addWidget(oct_button);
    hboxLayout->addWidget(hex_button);
    hboxLayout->addWidget(bin_button);

    QVBoxLayout* vboxLayout = new QVBoxLayout;
    vboxLayout->addLayout(glayout);
    vboxLayout->addLayout(hboxLayout);

    setWindowTitle(tr("Decimal Convert v1.1 by Qt"));
    setLayout(vboxLayout);

    connect(ten_button,SIGNAL(clicked()),this,SLOT(on_tenButton_clicked()));
    connect(hex_button,SIGNAL(clicked()),this,SLOT(on_hexButton_clicked()));
    connect(oct_button,SIGNAL(clicked()),this,SLOT(on_octButton_clicked()));
    connect(bin_button,SIGNAL(clicked()),this,SLOT(on_binButton_clicked()));
}

bool FindDialog::on_tenButton_clicked()
{
    bool ret = true;
    QString temp = ten_lineEdit->text();
    if(temp != "")
    {
        long number = temp.toLong(&ret,10);
        qDebug() << "number = " << number;
        bin_lineEdit->setText(QString::number(number,2));
        oct_lineEdit->setText(QString::number(number,8) );
        hex_lineEdit->setText(QString::number(number,16).toUpper());
    }
    return ret;
}

bool FindDialog::on_binButton_clicked()
{
    QString temp = bin_lineEdit->text();
    bool ret = true;
    if(temp != "")
    {
        long number = temp.toLong(&ret,2);
        qDebug() << "number = " << number;
        //bin_lineEdit->setText(QString::number(number,2));
        oct_lineEdit->setText(QString::number(number,8) );
        hex_lineEdit->setText(QString::number(number,16).toUpper());
        ten_lineEdit->setText(QString::number(number,10));
    }
    return ret;
}

bool FindDialog::on_hexButton_clicked()
{
    QString temp = hex_lineEdit->text();
    bool ret = true;
    if(temp != "")
    {
        long number = temp.toLong(&ret,16);
        qDebug() << "number = " << number;
        bin_lineEdit->setText(QString::number(number,2));
        oct_lineEdit->setText(QString::number(number,8) );
        //hex_lineEdit->setText(QString::number(number,16).toUpper());
        ten_lineEdit->setText(QString::number(number,10));
    }
    return ret;
}

bool FindDialog::on_octButton_clicked()
{
    bool ret = true;
    QString temp = oct_lineEdit->text();
    if(temp != "")
    {
        long number = temp.toLong(&ret,8);
        qDebug() << "number = " << number;
        bin_lineEdit->setText(QString::number(number,2));
        //oct_lineEdit->setText(QString::number(number,8) );
        hex_lineEdit->setText(QString::number(number,16).toUpper());
        ten_lineEdit->setText(QString::number(number,10));
    }
    return ret;
}


FindDialog::~FindDialog()
{

}

main.cpp文件实现

#include "FindDialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FindDialog* dialog = new FindDialog;
    dialog->show();

    return a.exec();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值