Основы программирования в Linux
Шрифт:
Часто вам нужно отключить или сделать серым вариант, если он недоступен в данный момент. Сделать недоступным любой виджет, включая 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
. Добавить кнопку в
QButtonGroup
можно с помощью метода insert
или заданием QButtonGroup
в качестве родительского виджета кнопки. Для уникального обозначения каждой кнопки в группе можно задать id
в методе insert
. Это особенно полезно при определении выбранной кнопки, т.к. функция selectedId
возвращает id
выбранной кнопки. Все кнопки
QRadioButton
, добавляемые в группу, автоматически становятся кнопками с исключающим выбором. Далее приведены прототипы конструкторов
QRadioButton
и одного уникального метода, который не вызовет большого удивления:
#include <qradiobutton.h>
QRadioButton(QWidget* parent, const char* name = 0);
QRadioButton(const QString& text, QWidget *parent, const char *name = 0);
bool QRadioButton::isChecked;
Выполните упражнение 17.5.
Упражнение 17.5. Виджет
QButton
Теперь применим полученные знания в примере с кнопками Qt. Приведенная далее программа создает кнопки разных типов (радиокнопки, флажки и простые кнопки), чтобы показать, как использовать эти виджеты в ваших приложениях.
1. Введите файл Buttons.h:
#include <qmainwindow.h>
#include <qcheckbox.h>
Поделиться с друзьями: