Выбрать главу
QButton: базовый класс кнопок

Все виджеты кнопок в комплекте Qt — потомки абстрактного класса QButton. У этого класса есть методы для опроса и переключения включенного/выключенного состояния кнопки и задания текста кнопки или ее графического представления.

Вам никогда не придется обрабатывать виджет типа QButton (не путайте с виджетом QPushButton!), поэтому нет смысла приводить конструкторы. Далее перечислено несколько полезных функций-методов этого класса:

#include <qbutton.h>

virtual void QButton::setText(const QString&);

virtual void QButton::setPixmap(const QPixmap&);

bool QButton::isToggleButton() const;

virtual void QButton::setDown(bool);

bool QButton::isDown() const;

bool QButton::isOn() const;

enum QButton::ToggleState { Off, NoChange, On }

ToggleState QButton::state() const;

У функций isDown и isOn одно назначение. Обе они возвращают TRUE, если кнопка была нажата или активизирована.

Часто вам нужно отключить или сделать серым вариант, если он недоступен в данный момент. Сделать недоступным любой виджет, включая QButton, можно с помощью вызова метода QWidget::setEnable(FALSE).

У QButton есть три подкласса, заслуживающие внимания:

□ QPushButton — виджет простой кнопки, выполняющий некоторое действие при щелчке кнопкой мыши;

□ QCheckBox — виджет кнопки, способный изменять состояние с включенного на выключенное для обозначения некоторого выбора;

□ QRadioButton — виджет кнопки, обычно применяемый в группе таких же кнопок, только одна из которых может быть активна в любой момент времени.

QPushButton

QPushButton — стандартная кнопка общего вида, содержащая текст, такой как "OK" или "Cancel" и/или пиксельную пиктограмму. Как все кнопки класса QButton, она порождает при активизации сигнал clicked и обычно используется для связи со слотом и выполнения некоторого действия.

Вы уже применяли кнопку QPushButton в примерах, и есть лишь еще одна интересная деталь, касающаяся этого простейшего из виджетов Qt. Кнопку QPushButton можно превратить из кнопки, не помнящей своего состояния, в кнопку-выключатель (т.е. способную быть включенной и выключенной), вызвав метод setToggleButton. (Если помните, у комплекта GTK+ из предыдущей главы есть для этих целей разные виджеты.)

Далее для полноты описания приведены конструкторы и полезные методы.

#include <qpushbutton.h>

QPushButton(QWidget *parent, const char *name = 0);

QPushButton(const QString& text, QWidget *parent, const char *name = 0);

QPushButton(const QIconSet& icon, const QString& text,

 QWidget *parent, const char * name = 0);

void QPushButton::setToggleButton(bool);

QCheckBox

QCheckBox — это кнопка, у которой есть состояние, ее можно включить и выключить (или установить и сбросить). Внешний вид QCheckBox зависит от стиля отображения окон текущей системы (Motif, Windows и т.д.), но обычно она отображается как флажок с сопроводительным текстом справа.

Вы можете также перевести кнопку QCheckBox в третье промежуточное состояние, которое означает "без изменения". Оно бывает полезно в редких случаях, когда вы не можете прочесть состояние выбора, который предоставляет кнопка QCheckBox (и, следовательно, самостоятельно установить или сбросить флажок), но хотите дать пользователю возможность оставить выбор неизменным наряду с установкой и сбросом.

#include <qcheckbox.h>

QCheckBox(QWidget *parent, const char *name = 0);

QCheckBox(const QString& text, QWidget *parent, const char *name = 0);

bool QCheckBox::isChecked();

void QCheckBox::setTristate(bool y = TRUE);

bool QCheckBox::isTristate();

QRadioButton

Радиокнопки — кнопки-переключатели, применяемые для отображения исключающего выбора, когда можно выбрать только один вариант из группы представленных (вспомните снова старые автомобильные радиоприемники, в которых можно было нажать только одну кнопку блока). Сами по себе кнопки QRadioButton не многим отличаются от кнопок QCheckBox, поскольку группировка и исключительный выбор обрабатываются классом QButtonGroup, главное же их отличие заключается в том, что они отображаются как круглые кнопки, а не как флажки.

QButtonGroup — виджет, облегчающий обработку групп кнопок за счет предоставления удобных методов.

#include <qbuttongroup.h>

QButtonGroup(QWidget *parent = 0, const char* name = 0);

QButtonGroup(const QString& title, QWidget* parent = 0,

 const char * name = 0);

int insert (QButton *button, int id = -1);

void remove(QButton *button);

int id(QButton *button) const;

int count() const;

int selectedId() const;

Применять виджет QButtonGroup проще простого: он даже предлагает необязательную рамку вокруг кнопок, если используется конструктор title.