Решил написать простенькую программку - конвертер чисел в различные системы счисления. Скачать архив с программой и её и исходниками можно тут: QBase_sources.rar(10.4Кб). Сама программа написана на C++ с использованием кроссплатформенной графической библиотеки Qt.
Весь программный код описан ниже.
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QComboBox>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
class QBase : public QWidget
{
Q_OBJECT
private:
QComboBox *m_baseFrom, *m_baseTo;
QLineEdit *m_inputNumber, *m_outputNumber;
public:
QBase(QWidget *parent = 0, Qt::WFlags flags = 0);
~QBase();
private slots:
void convert(const QString & text);
void toConvert();
};
QBase::QBase(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
QHBoxLayout *mainLayout = new QHBoxLayout(this);
QVBoxLayout *leftLayout = new QVBoxLayout;
QVBoxLayout *rightLayout = new QVBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
m_baseFrom = new QComboBox;
leftLayout->addWidget(m_baseFrom);
for (int i=2; i<=10; i++)
m_baseFrom->addItem(QString("%1").arg(i));
m_baseFrom->addItem("16");
m_baseFrom->setCurrentIndex(8);
m_baseTo = new QComboBox;
rightLayout->addWidget(m_baseTo);
for (int i=2; i<=10; i++)
m_baseTo->addItem(QString("%1").arg(i));
m_baseTo->addItem("16");
m_baseTo->setCurrentIndex(9);
m_inputNumber = new QLineEdit;
leftLayout->addWidget(m_inputNumber);
m_outputNumber = new QLineEdit;
rightLayout->addWidget(m_outputNumber);
m_outputNumber->setReadOnly(true);
connect( m_inputNumber, SIGNAL(textChanged(QString)),
this, SLOT(convert(QString)) );
connect( m_baseFrom, SIGNAL(currentIndexChanged(int)),
this, SLOT(toConvert()) );
connect( m_baseTo, SIGNAL(currentIndexChanged(int)),
this, SLOT(toConvert()) );
m_inputNumber->setFocus(Qt::OtherFocusReason);
setTabOrder(m_inputNumber, m_baseFrom);
setTabOrder(m_baseFrom, m_baseTo);
m_outputNumber->setFocusPolicy(Qt::NoFocus);
}
QBase::~QBase() {
delete m_baseFrom;
delete m_baseTo;
delete m_inputNumber;
delete m_outputNumber;
}
void QBase::convert(const QString & text) {
bool b;
int baseFrom = m_baseFrom->currentText().toInt(&b,10);
int baseTo = m_baseTo->currentText().toInt(&b,10);
QString str = QString("%1").arg(text.toInt(&b,baseFrom),0,baseTo);
if (!m_inputNumber->text().length())
m_outputNumber->setText("");
else if (!b || (text[0]=='-') || (text[0]=='+'))
m_outputNumber->setText("Invalid number");
else
m_outputNumber->setText(str);
}
void QBase::toConvert() {
convert(m_inputNumber->text());
}
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QBase w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}
* This source code was highlighted with Source Code Highlighter.
Если установлен интегратор Qt в MicroSoft Visual Studio, то распакуйте исходники из архива в одну папку, запустите Visual Studio и в меню выберите пункт "Qt"->"Open Solution from .pro File" и укажите путь к файлу QBase.pro. В этом случае Visual Studio сама создаст проект.
1 комментарий:
Такие вещи и виндовый калькулятор может делать неплохо. А вот если бы дрооообные числа твой конвертер считал
Отправить комментарий