Пример 1: программа, которая переводит число из 16-ой системы в 10-ую. При вводе выполняется проверка вводимых символов.
Спроектируйте окно как показано на рисунке.
Добавьте слот для кнопки «Перевести» и напишите код, показанный ниже.
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent):
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
adjustSize(); // делаем размеры окна минимально-необходимыми
QRegExp regExp("[A-Fa-f0-9]{,10}");
// задаем набор допустимых символов и их максимальное количество
QRegExpValidator* valid = new QRegExpValidator(regExp, this);
// создаем указатель на объект валидатор для проверки вводимых символов
ui->lineEdit->setValidator(valid);
// устанавливаем для первого окна валидатор
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
int dec = 0; // десятичное значение
QString str = ui->lineEdit->text(); // прочитали 16-ое число
str = str.toUpper(); // сделали все буквы прописными
for (int i=0; i<str.length(); ++i) // проходим по 16-му числу
{
char ch = str[i].toAscii();
// выполняем преобразование кода каждой цифры в код ASCII
int k = 0; // число, соответствующее 16-ой цифре
if (ch <= '9') // если десятичная цифра
k = ch -'0'; // вычитаем код нуля
else k = ch - 'A' + 10;
// если буква, вычитаем код буквы 'A' и добавляем 10
dec = dec*16 + k; // вычислем значение 10-го числа по схеме Горнера
}
ui->lineEdit_2->setText(QString::number(dec)); // выводим 10-ое число
ui->lineEdit->setSelection(0, 10);
// выделяем содержимое окна для ввода
}
Пример 2: программа, которая считывает строку символов, состоящую из русских букв, запятых и пробелов и выводит на экран множество символов этой строки.
Спроектируйте окно как показано на рисунке.
#include"dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent):
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QRegExp reg(trUtf8("[а-яА-Я, ]+"));
// регулярное выражение, описывающее набор допустимых символов
QRegExpValidator* valid = new QRegExpValidator(reg, this);
// объявляем указатель на объект валидатор, использующий регулярное выражение
ui->lineEdit->setValidator(valid); /* устанавливаем валидатор для элемента lineEdit, предназначенного для ввода исходных данных */
connect(ui->lineEdit, SIGNAL(textChanged(QString)),
this, SLOT(SetofSymbols(QString)));
/* соединяем сигнал об изменении содержимого строки со слотом, который будет вызываться в ответ на это изменение */
}
Добавьте в файл dialog.h объявление слота:
public slots:
void SetofSymbols(QString);
Добавьте в файл dialog.cpp определение слота:
// Обратите внимание на то, что исходная строка автоматически передается слоту:
void Dialog::SetofSymbols(QString str)
{
QList<QChar> rez; // список символов для создания множества
for (int i = 0; i<str.length(); ++i)
// перебираем все символы исходной строки
if (!rez.contains(str[i]))
// если символ не содержится во множестве
rez << str[i]; // добавляем его в список
qSort(rez); // сортируем список
QString strRez; // строка для вывода
foreach(QChar ch, rez) // каждый символ списка добавляем в строку
strRez += ch;
ui->lineEdit_2->setText(strRez); // выводим результат
}