Кнопка QPushButton

Последнее обновление: 08.12.2023

Класс QPushButton представляет кнопку. Данный класс наследуется от класса QAbstractButton, который, в свою очередь, наследуется от QWidget.

Для создания кнопки можно использовать один из трех конструкторов класса:

QPushButton(QWidget *parent = nullptr)
QPushButton(const QString &text, QWidget *parent = nullptr)
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)

В конструкторы можно передать следующие параметры:

  • parent: указатель на родительский виджет, на котором будет отображаться кнопка.

  • text: текст кнопки в виде объекта QString

  • icon: картигка для кнопки в виде объекта QIcon

Создание простейшей кнопки:

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget widget;
    widget.setWindowTitle("METANIT.COM");
    widget.setMinimumWidth(250);
    widget.setMinimumHeight(150);

    QPushButton btn{"Click", &widget};

    widget.show();
    return app.exec();
}
Кнопка QPushButton в Qt

Класс QPushButton определяет и наследует от QAbstractButton ряд методов, которые позволяют управлять функционалом кнопки. Но нас в первую очередь будет интересовать обработка нажатий. Для обработки событий в Qt применяется концепция сигналов. Когда кнопка активирована (т. е. нажата и отпущена, пока курсор мыши находится внутри кнопки), например, при надатии пользователем на кнопку или при программном надатии, генерируется сигнал clicked или иными словами событие нажатия:

void QAbstractButton::clicked(bool checked = false)

Данный сигнал определен как функция в родительском классе QAbstractButton. И нам надо отловить этот сигнал. Чтобы это сделать, применяется метод connect(), который определен в классе QObject. Этот метод иметь несколько разных версий, возьмем самую простую:

connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const

Первый параметр - sender - это указатель на объект, на котором происходит событие. Второй параметр (signal) - указатель на метод сигнала. Третий параметр (method) - указатель на функцию, которая будет срабатывать при генерации сигнала, то есть обработчик событий. Четвертный и необязательный параметр представляет тип соединения.

Например, обработаем событие нажатия:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMessageBox>

void onClick();
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget widget;
    widget.setMinimumSize(250, 150);
    widget.setWindowTitle("METANIT.COM");

    QPushButton btn{"Click", &widget};
    // устанавливаем для события clicked обработчик onClick
    QObject::connect(&btn, &QPushButton::clicked, onClick);
    widget.show();
    return app.exec();
}
// обработчик нажатия
void onClick()
{
    QMessageBox msgBox;     // диалоговое окно
    msgBox.setText("Hello METANIT.COM!"); // устанавливаем текст
    msgBox.exec();  // отображаем диалоговое окно
}

В данном случае для обработки события определена функция onClick. В ней создаем объект QMessageBox, который представляет окно сообщения. с помощью метода setText устанавливаем текст сообщения. И затем с помощью метода exec() отображаем окно сообщения на экране.

Для связи этой функции с событием нажатия выполняем следующий статический метод:

QObject::connect(&btn, &QPushButton::clicked, onClick);

Первому параметру передаем указатель на отслеживаемый объект - кнопку btn. Второй параметр представляет указатель на сигнал/событие нажатия кнопки - QPushButton::clicked - то есть, что мы обрабатываем. И третий параметр - функция обработчика onClick.

В итоге при нажатии на кнопку отобразится окно с сообщением:

Обработка нажатия кнопки QPushButton в Qt

Установка текста

Для установки текста класс QPushButton предоставляет метод setText(), в который передается текст в виде объекта QString:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QMessageBox>

void onClick();

QPushButton* btn = nullptr;
int count{0};
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget widget;
    widget.setMinimumSize(250, 150);
    widget.setWindowTitle("METANIT.COM");
    btn = new QPushButton("Click", &widget);
    QObject::connect(btn, &QPushButton::clicked, onClick);
    widget.show();
    return app.exec();
}

void onClick()
{
    btn->setText(QString::number(++count));
}

Здесь по нажатию увеличиваем значение переменной count и выводим ее значение на кнопку:

Нажатие кнопок в Qt

Если нам надо получить текст кнопки, то это можно сделать с помощью метода text(), который возвращает объект QString:

QString btnText = btn->text();

Установка иконки

С помощью метода setIcon() или через один из параметров конструктора можно установить изображение, которое будет отображаться на кнопке. В этот метод пережается объект QIcon из модуля gui. Поэтому прежде всего надо подключить данный модуль в файле конфигурации проекта (который имеет расширение *.pro)

QT += widgets gui

Затем можно определить и использовать объект QIcon, в конструктор которого передается путь к файлу изображения:

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget widget;
    widget.setMinimumSize(250, 150);
    widget.setWindowTitle("METANIT.COM");
    // установка изображения кнопки
    QPushButton* btn = new QPushButton(QIcon("D:\\cpp.jpg"), "Click", &widget);
    widget.show();
    return app.exec();
}

В моем случае на кнопке будет отображаться картинка, которая расположена по пути "D:\cpp.jpg".

Установка иконки кнопки QPushButton в Qt

Настройка размеров и позиционирования кнопки

Метод setGeometry() позволяет определить область, где будет располагаться кнопка. Он имеет две версии:

void setGeometry(const QRect &)
void setGeometry(int x, int y, int w, int h)

В метод можно передать ссылку на объект QRect, который устанавливает верхний левый угол кнопки, а также ширину и длину. Вторая версия метода позволяет последовательно указать x и y координаты верхнего угла, а также ширину (w) и высоту(h)

Применим вторую версию метода:

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget widget;
    widget.setMinimumSize(250, 150);
    widget.setWindowTitle("METANIT.COM");

    QPushButton* btn = new QPushButton("Click", &widget);
    btn->setGeometry(20, 10, 100, 30);

    widget.show();
    return app.exec();
}
позиционирование и размеры кнопки QPushButton в Qt
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850