进制转换小程序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();
}