namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui;public slots: void MyEventHandler1();};#endif // WIDGET_H
#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MyEventHandler1()));}Widget::~Widget(){ delete ui;}//функция добавляет пробелы в число 12345678 -> 12 345 678//---------------------------------------------------------------------------QString fn_SpsToInt(QString str){ int x = str.length() - 3; while(x > 0) {str.insert(x, QString(" ")); x -= 3;} return str;}// ***********************************************************************************// функция обрабатывает по три цифрыQString fnThreeDigitText(int xx){ QString edn[] = {"", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" }; QString dec[] = {"двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"}; QString han[] = {"сто", "двести" ,"триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"}; QString str; int y = xx / 100; if(y > 0) str = han[y-1] + " "; xx = xx % 100; y = xx / 10; if(xx > 19) { str += dec[y-2] + " "; xx = xx % 10; } str += edn[xx]; return str;}// ***********************************************************************************// функция превращения числа в строку словQString fnOllDigitsText(qint64 xx){ // return если ноль if(xx == 0) return "ноль"; int y, z, Cx = 0; QString s1, s2, rez; QString gig[] = {"", "тысяч", "миллион", "миллиард", "триллион"}; // собсна процесс превращения числа в строку слов while(xx > 0) { if(xx % 1000) { y = xx % 10; z = xx % 100; s1 = fnThreeDigitText(xx % 1000); s2 = gig[Cx]; // отсюда начинаются шаманские танцы с бубном // с целью изменения склонений и спряжений if(Cx == 1) { if((z < 10) || (z > 20)) { if(y == 1) s2 += "а"; if((y > 1) && (y < 5)) s2 += "и"; if(y == 1) s1.replace(s1.length()-2, 2, "на"); if(y == 2) s1.replace(s1.length()-2, 2, "ве"); } } if(Cx > 1) { if((z > 10) && (z < 21)) s2 += "ов"; else if((y > 1) && (y < 5)) s2 += "а"; else if((y == 0) || (y > 4)) s2 += "ов"; } // конец шаманских танцев с бубном rez = "\n" + s1 + " " + s2 + ", " + rez; } Cx++; xx = xx / 1000; } // удаляем лишние последние пробелы и запятые y = rez.length(); Cx = 0; while(y--) { if((rez.at(y) == ' ')||(rez.at(y) == ',')) Cx++; else break; } rez.resize(rez.length() - Cx); // удаляем непечатные символы с начала и конца строки // и добавляем точку в конце rez = rez.trimmed(); // + "."; // делаем первую букву заглавной rez[0] = rez.at(0).toUpper(); return rez;}// ***********************************************************************************// обработка нажатия кнопокvoid Widget::MyEventHandler1(){ QChar s; QString inp = ui->lineEdit->text(); if(inp == "") return; // проверка правильности введенного числа for(int i = 0; i < inp.length(); i++) { s = inp.at(i); if(s < '0' || s > '9') { ui->label_1->setText("неправильное число"); return ; } } ui->label_4->setText(fn_SpsToInt(inp)); ui->label_1->setText(fnOllDigitsText(inp.toLongLong())); return;}
greaterThan(QT_MAJOR_VERSION, 4): { QT += widgets}