Как работать с QPushButton и QLineEdit
(релиз Qt SDK на момент написания данной статьи - 1.1.4)
Для всех начинающих святая тема это написание какой-нибудь фигни, которая умеет обработать текст (или числа), и как-то отреагировать на нажатие кнопки. В этой статье я опишу эти святые действия.
Первым делом мы создаём GUI приложение Qt (как в http://easy-qt.blogspot.com/2012/01/hello-world-v4-ui-edition.html )
На следующем шаге открываем файл mainwindow.ui двойным кликом и нашим глазам предстанет следующая картина:
Следующим шагом добавим два QLineEdit и один QPushButton, т.е. 2 поля для ввода текста и одно кнопку. Будем имя кнопки завать слиянием текстовых значений в текстовых полях.
Для добавленных объектов существуют имена по умолчанию (поле objectName справа во второй половине списка свойств), в нашем случае это lineEdit и lineEdit_2 для текстовых полей и pushButton для кнопки. Я оставлю их такими, потому что мне лень. Вам в этому примере не советую экспериментировать, пока не дочитаете до конца.
Теперь самое интересное. В автоматически сгенерированных файлах к классу MainWindow у нас уже есть указатель на форму:
Ui::MainWindow *ui;
В конструкторе уже прописана его инициализация:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); // инициализация указателя на форму
}
В соответствии с особенностью Qt в виде сигналов и слотов (
http://easy-qt.blogspot.com/2012/01/qt_31.html ) наша кнопка будет "сигналить" при клике по ней (да поможет вам справка). Для этого создадим слот, к которому в последующем и подключим наш сигнал. mainwindow.h будет выглядеть следующим образом:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QString> // добавим эту библиотеку для работы со строкамиnamespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void nashSlot(); // это созданный нами слотprivate:
Ui::MainWindow *ui;};#endif // MAINWINDOW_H
Теперь делаем определение этого слота в mainwindow.cpp
void MainWindow::nashSlot()
{
QString str1 = ui->lineEdit->text(); // получаем строку из первого QLineEdit
QString str2 = ui->lineEdit_2->text(); // получаем строку из второго QLineEdit
QString finalStr = str1 + str2; // объединяем эти строки в одну
ui->pushButton->setText(finalStr); // задаем имя кнопки равным финальной строке
}
После этого у вас ещё ничего не заработает, не торопитесь. Остался последний штрих - подключить сигнал от кнопки к нашему слоту. Сделаем это в конструкторе следующим образом:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(nashSlot()));
}
Более подробное описание сигналов и слотов есть здесь
http://easy-qt.blogspot.com/2012/01/qt_31.html .
Теперь у вас есть общее представление о том, как работать с кнопками и текстовыми полями. Если вам надо получить числовое значение из QLineEdit (а это бывает очень часто), делается это так:
int vall = ui->lineEdit->text().toInt();
А обратно
QString vall2 = QString::number(vall);
Безусловно, полезным будет выложить непосредственно сам проект, или хотя бы три файла в окончательной редакции.
ОтветитьУдалитьА комментарий возник после неудачи при компилировании данного проекта.