среда, 22 февраля 2012 г.

Как работать с QPushButton и QLineEdit (для начинающих)

Как работать с 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_OBJECT
public:
    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); 

1 комментарий:

  1. Безусловно, полезным будет выложить непосредственно сам проект, или хотя бы три файла в окончательной редакции.

    А комментарий возник после неудачи при компилировании данного проекта.

    ОтветитьУдалить