Класс QAbstractButton
Класс QAbstractButton является абстрактным базовым классом виджетов кнопок, предоставляющим функциональность, общую для кнопок. Подробнее...
| Заголовок: | #include <QAbstractButton> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QWidget |
| Наследуется от: |
Свойства
|
Открытые функции
| QAbstractButton(QWidget *parent = nullptr) | |
| virtual | ~QAbstractButton() |
| bool | autoExclusive() const |
| bool | autoRepeat() const |
| int | autoRepeatDelay() const |
| int | autoRepeatInterval() const |
| QButtonGroup * | group() const |
| QIcon | icon() const |
| QSize | iconSize() const |
| bool | isCheckable() const |
| bool | isChecked() const |
| bool | isDown() const |
| void | setAutoExclusive(bool) |
| void | setAutoRepeat(bool) |
| void | setAutoRepeatDelay(int) |
| void | setAutoRepeatInterval(int) |
| void | setCheckable(bool) |
| void | setDown(bool) |
| void | setIcon(const QIcon &icon) |
| void | setShortcut(const QKeySequence &key) |
| void | setText(const QString &text) |
| QKeySequence | shortcut() const |
| QString | text() const |
Открытые слоты
| void | animateClick() |
| void | click() |
| void | setChecked(bool) |
| void | setIconSize(const QSize &size) |
| void | toggle() |
Сигналы
| void | clicked(bool checked = false) |
| void | pressed() |
| void | released() |
| void | toggled(bool checked) |
Защищённые функции
| virtual void | checkStateSet() |
| virtual bool | hitButton(const QPoint &pos) const |
| virtual void | nextCheckState() |
Переопределённые защищённые функции
| virtual void | changeEvent(QEvent *e) override |
| virtual bool | event(QEvent *e) override |
| virtual void | focusInEvent(QFocusEvent *e) override |
| virtual void | focusOutEvent(QFocusEvent *e) override |
| virtual void | keyPressEvent(QKeyEvent *e) override |
| virtual void | keyReleaseEvent(QKeyEvent *e) override |
| virtual void | mouseMoveEvent(QMouseEvent *e) override |
| virtual void | mousePressEvent(QMouseEvent *e) override |
| virtual void | mouseReleaseEvent(QMouseEvent *e) override |
| virtual void | paintEvent(QPaintEvent *e) override = 0 |
| virtual void | timerEvent(QTimerEvent *e) override |
Подробное описание
Этот класс реализует абстрактную кнопку. Подклассы этого класса обрабатывают пользовательские действия и определяют, как кнопка рисуется.
QAbstractButton предоставляет поддержку как для кнопок, так и для переключаемых (переключательных) кнопок. Переключаемые кнопки реализованы в классах QRadioButton и QCheckBox. Кнопки без переключателя реализованы в классах QPushButton и QToolButton; они также предоставляют переключательное поведение при необходимости.
Любая кнопка может отображать метку с текстом и значком. setText() устанавливает текст; setIcon() устанавливает значок. Если кнопка отключена, её метка меняется, чтобы кнопка выглядела "отключённой".
Если кнопка является текстовой кнопкой со строкой, содержащей амперсанд ('&'), QAbstractButton автоматически создаёт сочетание клавиш. Например:
QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this); Сочетанию Alt+C назначается кнопка, т.е. при нажатии пользователем Alt+C кнопка вызовет animateClick(). Подробности см. в документации QShortcut. Чтобы отобразить фактический амперсанд, используйте '&&'.
Вы также можете установить пользовательское сочетание клавиш с помощью функции setShortcut(). Это полезно в основном для кнопок, не имеющих текста, и, следовательно, не имеющих автоматического сочетания клавиш.
button->setIcon(QIcon(":/images/print.png"));
button->setShortcut(tr("Alt+F7")); Все кнопки, предоставляемые Qt (QPushButton, QToolButton, QCheckBox и QRadioButton), могут отображать как текст, так и значки.
Кнопка может быть установлена в качестве кнопки по умолчанию в диалоговом окне с помощью QPushButton::setDefault() и QPushButton::setAutoDefault().
QAbstractButton предоставляет большинство состояний, используемых для кнопок:
- isDown() указывает, нажата ли кнопка.
- isChecked() указывает, выбрана ли кнопка. Только переключаемые кнопки могут быть выбраны и сняты с выбора (см. ниже).
-
isEnabled() указывает, может ли пользователь нажать на кнопку.
Примечание: В отличие от других виджетов, кнопки, производные от QAbstractButton, принимают события мыши и контекстного меню при отключении.
- setAutoRepeat() устанавливает, будет ли кнопка автоматически повторять нажатия, если пользователь её удерживает. autoRepeatDelay и autoRepeatInterval определяют, как осуществляется автоматическое повторение.
- setCheckable() устанавливает, является ли кнопка переключательной или нет.
Разница между isDown() и isChecked() заключается в следующем. При нажатии на переключательную кнопку для её выбора, кнопка сначала нажимается, а затем отпускается в выбранное состояние. При повторном нажатии (для снятия выбора) кнопка сначала переходит в нажатое состояние, а затем в невыбранное состояние (isChecked() и isDown() оба ложны).
QAbstractButton предоставляет четыре сигнала:
- pressed() генерируется при нажатии левой кнопки мыши, когда курсор мыши находится внутри кнопки.
- released() генерируется при отпускании левой кнопки мыши.
- clicked() генерируется при первом нажатии и отпускании кнопки, при нажатии сочетания клавиш или при вызове click() или animateClick().
- toggled() генерируется при изменении состояния переключательной кнопки.
Для подкласса QAbstractButton необходимо переопределить как минимум paintEvent() для рисования контура кнопки и её текста или пиксел-картинки. Также рекомендуется переопределить sizeHint() и иногда hitButton() (для определения, находится ли нажатие мыши внутри кнопки). Для кнопок с более чем двумя состояниями (например, трёхсостояниевые кнопки) вам также потребуется переопределить checkStateSet() и nextCheckState().
См. также QButtonGroup.
Документация свойств
autoExclusive : bool
Это свойство указывает, включена ли автоматическая эксклюзивность.
Если автоматическая эксклюзивность включена, кнопки с одинаковым родительским виджетом ведут себя так, как если бы они были частью одной группы эксклюзивных кнопок. В группе эксклюзивных кнопок только одна кнопка может быть отмечена в любой момент времени; нажатие другой кнопки автоматически сбросит предыдущую.
Это свойство не влияет на кнопки, входящие в группу кнопок.
По умолчанию autoExclusive выключен, за исключением радиокнопок.
Функции доступа:
| bool | autoExclusive() const |
| void | setAutoExclusive(bool) |
См. также QRadioButton.
autoRepeat : bool
Это свойство указывает, включён ли автоповтор.
Если автоповтор включен, то сигналы pressed(), released() и clicked() генерируются через равные промежутки времени, пока кнопка нажата. Автоповтор выключен по умолчанию. Начальная задержка и интервал повтора задаются в миллисекундах свойствами autoRepeatDelay и autoRepeatInterval.
Примечание: Если кнопка нажата с помощью сочетания клавиш, автоповтор включен и управляется системой, а не этим классом. Сигналы pressed(), released() и clicked() генерируются так же, как и в обычном случае.
Функции доступа:
| bool | autoRepeat() const |
| void | setAutoRepeat(bool) |
autoRepeatDelay : int
Это свойство содержит начальную задержку автоповтора.
Если autoRepeat включен, то autoRepeatDelay определяет начальную задержку в миллисекундах, прежде чем начнется автоповтор.
Функции доступа:
| int | autoRepeatDelay() const |
| void | setAutoRepeatDelay(int) |
См. также autoRepeat и autoRepeatInterval.
autoRepeatInterval : int
Это свойство содержит интервал автоповтора.
Если autoRepeat включен, то autoRepeatInterval определяет длительность интервала автоповтора в миллисекундах.
Функции доступа:
| int | autoRepeatInterval() const |
| void | setAutoRepeatInterval(int) |
См. также autoRepeat и autoRepeatDelay.
checkable : bool
Это свойство указывает, можно ли отметить кнопку.
По умолчанию кнопка не может быть отмечена.
Функции доступа:
| bool | isCheckable() const |
| void | setCheckable(bool) |
См. также checked.
checked : bool
Это свойство указывает, отмечена ли кнопка.
Только кнопки, которые можно отмечать, могут быть отмечены. По умолчанию кнопка не отмечена.
Функции доступа:
| bool | isChecked() const |
| void | setChecked(bool) |
Сигнал уведомления:
| void | toggled(bool checked) |
См. также checkable.
down : bool
Это свойство указывает, нажата ли кнопка.
Если это свойство true, кнопка нажата. Сигналы pressed() и clicked() не генерируются, если вы установите это свойство в значение true. По умолчанию значение false.
Функции доступа:
| bool | isDown() const |
| void | setDown(bool) |
icon : QIcon
Это свойство содержит иконку, отображаемую на кнопке.
Размер иконки по умолчанию определяется стилем графического интерфейса, но может быть изменён с помощью свойства iconSize.
Функции доступа:
| QIcon | icon() const |
| void | setIcon(const QIcon &icon) |
iconSize : QSize
Это свойство содержит размер иконки, используемой для этой кнопки.
Размер по умолчанию определяется стилем графического интерфейса. Это максимальный размер иконок. Меньшие иконки не будут масштабироваться.
Функции доступа:
| QSize | iconSize() const |
| void | setIconSize(const QSize &size) |
shortcut : QKeySequence
Это свойство содержит сочетание клавиш, связанное с кнопкой.
Функции доступа:
| QKeySequence | shortcut() const |
| void | setShortcut(const QKeySequence &key) |
text : QString
Это свойство содержит текст, отображаемый на кнопке.
Если у кнопки нет текста, функция text() вернёт пустую строку.
Если текст содержит символ амперсанда ('&'), для него автоматически создаётся сочетание клавиш. Символ, следующий за '&', будет использоваться в качестве клавиши сочетания. Любое предыдущее сочетание будет перезаписано или очищено, если в тексте не определено сочетание клавиш. Подробности см. в документации QShortcut. Чтобы отобразить фактический амперсанд, используйте '&&'.
Текст по умолчанию отсутствует.
Функции доступа:
| QString | text() const |
| void | setText(const QString &text) |
Документация функций-членов
QAbstractButton::QAbstractButton(QWidget *parent = nullptr)
Конструктор абстрактной кнопки с родительским виджетом parent.
[slot] void QAbstractButton::animateClick()
Выполняет анимированное нажатие: кнопка сразу нажимается, а затем отпускается через 100 мс.
Повторный вызов этой функции, прежде чем кнопка будет отпущена, сбрасывает таймер отпуска.
Все сигналы, связанные с нажатием, генерируются в соответствии с ситуацией.
Эта функция ничего не делает, если кнопка отключена.
См. также click().
[slot] void QAbstractButton::click()
Выполняет нажатие.
Все обычные сигналы, связанные с нажатием, генерируются в соответствии с ситуацией. Если кнопка может быть отмечена, состояние кнопки переключается.
Эта функция ничего не делает, если кнопка отключена.
См. также animateClick().
[signal] void QAbstractButton::clicked(bool checked = false)
Этот сигнал испускается, когда кнопка активируется (т.е., нажата и отпущена, при этом курсор мыши находится внутри кнопки), когда нажат сочетание клавиш или когда вызывается click() или animateClick(). Отметим, что этот сигнал не испускается, если вы вызываете setDown(), setChecked() или toggle().
Если кнопка допускает проверку, то checked имеет значение true, если кнопка отмечена, или false, если кнопка не отмечена.
См. также pressed(), released() и toggled().
[signal] void QAbstractButton::pressed()
Этот сигнал испускается при нажатии на кнопку.
См. также released() и clicked().
[signal] void QAbstractButton::released()
Этот сигнал испускается при отпускании кнопки.
См. также pressed(), clicked() и toggled().
[slot] void QAbstractButton::toggle()
Переключает состояние кнопки, допускающей проверку.
См. также checked.
[signal] void QAbstractButton::toggled(bool checked)
Этот сигнал испускается всякий раз, когда кнопка, допускающая проверку, изменяет свое состояние. checked имеет значение true, если кнопка отмечена, или false, если кнопка не отмечена.
Это может быть результатом действия пользователя, активации слота click() или вызова setChecked().
Состояния кнопок в группах взаимоисключающих кнопок обновляются перед испусканием этого сигнала. Это означает, что слоты могут реагировать на сигнал "выключено" или сигнал "включено", испускаемый кнопками в группе, состояния которых изменились.
Например, слот, реагирующий на сигналы, испускаемые только что отмеченными кнопками, но игнорирующий сигналы от кнопок, которые были сняты с отметки, может быть реализован с использованием следующего шаблона:
void MyWidget::reactToToggle(bool checked)
{
if (checked) {
// Examine the new button states.
...
}
} Группы кнопок можно создавать с помощью класса QButtonGroup, а обновления состояний кнопок отслеживать с помощью сигнала QButtonGroup::buttonClicked().
Примечание: Сигнал уведомления для свойства checked.
См. также checked и clicked().
[virtual] QAbstractButton::~QAbstractButton()
Уничтожает кнопку.
[override virtual protected] void QAbstractButton::changeEvent(QEvent *e)
Переопределяет: QWidget::changeEvent(QEvent *event).
[virtual protected] void QAbstractButton::checkStateSet()
Этот виртуальный обработчик вызывается при использовании setChecked(), если он не вызывается изнутри nextCheckState(). Это позволяет подклассам сбрасывать промежуточные состояния кнопок.
См. также nextCheckState().
[override virtual protected] bool QAbstractButton::event(QEvent *e)
Переопределяет: QWidget::event(QEvent *event).
[override virtual protected] void QAbstractButton::focusInEvent(QFocusEvent *e)
Переопределяет: QWidget::focusInEvent(QFocusEvent *event).
[override virtual protected] void QAbstractButton::focusOutEvent(QFocusEvent *e)
Переопределяет: QWidget::focusOutEvent(QFocusEvent *event).
QButtonGroup *QAbstractButton::group() const
Возвращает группу, к которой принадлежит эта кнопка.
Если кнопка не является членом какой-либо QButtonGroup, эта функция возвращает nullptr.
См. также QButtonGroup.
[virtual protected] bool QAbstractButton::hitButton(const QPoint &pos) const
Возвращает true, если pos находится внутри прямоугольника нажатия кнопки; в противном случае возвращает false.
По умолчанию, нажимаемая область — это весь виджет. Подклассы могут переопределить эту функцию, чтобы обеспечить поддержку нажимаемых областей различной формы и размеров.
[override virtual protected] void QAbstractButton::keyPressEvent(QKeyEvent *e)
Переопределяет: QWidget::keyPressEvent(QKeyEvent *event).
[override virtual protected] void QAbstractButton::keyReleaseEvent(QKeyEvent *e)
Переопределяет: QWidget::keyReleaseEvent(QKeyEvent *event).
[override virtual protected] void QAbstractButton::mouseMoveEvent(QMouseEvent *e)
Переопределяет: QWidget::mouseMoveEvent(QMouseEvent *event).
[override virtual protected] void QAbstractButton::mousePressEvent(QMouseEvent *e)
Переопределяет: QWidget::mousePressEvent(QMouseEvent *event).
[override virtual protected] void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
Переопределяет: QWidget::mouseReleaseEvent(QMouseEvent *event).
[virtual protected] void QAbstractButton::nextCheckState()
Этот виртуальный обработчик вызывается при нажатии кнопки. По умолчанию, выполняется setChecked(!isChecked()) если кнопка isCheckable(). Это позволяет подклассам реализовать промежуточные состояния кнопок.
См. также checkStateSet().
[override pure virtual protected] void QAbstractButton::paintEvent(QPaintEvent *e)
Переопределяет: QWidget::paintEvent(QPaintEvent *event).
[override virtual protected] void QAbstractButton::timerEvent(QTimerEvent *e)
Переопределяет: QObject::timerEvent(QTimerEvent *event).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qabstractbutton.html