<b>#include <qcheckbox.h></b>
<b>QCheckBox(QWidget *parent, const char *name = 0);</b>
<b>QCheckBox(const QString& text, QWidget *parent, const char *name = 0);</b>
<b>bool QCheckBox::isChecked();</b>
<b>void QCheckBox::setTristate(bool y = TRUE);</b>
<b>bool QCheckBox::isTristate();</b>
QRadioButtonРадиокнопки — кнопки-переключатели, применяемые для отображения исключающего выбора, когда можно выбрать только один вариант из группы представленных (вспомните снова старые автомобильные радиоприемники, в которых можно было нажать только одну кнопку блока). Сами по себе кнопки QRadioButton не многим отличаются от кнопок QCheckBox, поскольку группировка и исключительный выбор обрабатываются классом QButtonGroup, главное же их отличие заключается в том, что они отображаются как круглые кнопки, а не как флажки.
QButtonGroup — виджет, облегчающий обработку групп кнопок за счет предоставления удобных методов.
<b>#include <qbuttongroup.h></b>
<b>QButtonGroup(QWidget *parent = 0, const char* name = 0);</b>
<b>QButtonGroup(const QString& title, QWidget* parent = 0,</b>
<b> const char * name = 0);</b>
<b>int insert (QButton *button, int id = -1);</b>
<b>void remove(QButton *button);</b>
<b>int id(QButton *button) const;</b>
<b>int count() const;</b>
<b>int selectedId() const;</b>
Применять виджет QButtonGroup проще простого: он даже предлагает необязательную рамку вокруг кнопок, если используется конструктор title.
Добавить кнопку в QButtonGroup можно с помощью метода insert или заданием QButtonGroup в качестве родительского виджета кнопки. Для уникального обозначения каждой кнопки в группе можно задать id в методе insert. Это особенно полезно при определении выбранной кнопки, т.к. функция selectedId возвращает id выбранной кнопки.
Все кнопки QRadioButton, добавляемые в группу, автоматически становятся кнопками с исключающим выбором.
Далее приведены прототипы конструкторов QRadioButton и одного уникального метода, который не вызовет большого удивления:
<b>#include <qradiobutton.h></b>
<b>QRadioButton(QWidget* parent, const char* name = 0);</b>
<b>QRadioButton(const QString& text, QWidget *parent, const char *name = 0);</b>
<b>bool QRadioButton::isChecked();</b>
Выполните упражнение 17.5.
Упражнение 17.5. Виджет QButton
Теперь применим полученные знания в примере с кнопками Qt. Приведенная далее программа создает кнопки разных типов (радиокнопки, флажки и простые кнопки), чтобы показать, как использовать эти виджеты в ваших приложениях.
1. Введите файл Buttons.h:
#include <qmainwindow.h>
#include <qcheckbox.h>
#include <qbutton.h>
#include <qradiobutton.h>
class Buttons : public CMainWindow {
Q_OBJECT
public:
Buttons(QWidget *parent = 0, const char *name = 0);
2. Вы запросите состояние ваших кнопок позже, в функции слота, поэтому объявите указатели кнопок и вспомогательную функцию PrintActive с атрибутом private в объявлении класса:
private:
void PrintActive(QButton *button);
QCheckBox *checkbox;
QRadioButton *radiobutton1, *radiobutton2;
private slots:
void Clicked();
}
3. Далее следует файл Buttons.срр:
#include "Buttons.moc"
#include <qbuttongroup.h>
#include <qpushbutton.h>
#include <qapplication.h>
#include <qlabel.h>
#include <qlayout.h>
#include <iostream>
Buttons::Buttons(QWidget *parent, const char *name) :
QMainWindow(parent, name) {
QWidget* widget = new QWidget(this);
setCentralWidget(widget);
QVBoxLayout *vbox = new QVBoxLayout(widget, 5, 10, "vbox");
checkbox = new QCheckBox("CheckButton", widget, "check");
vbox->addWidget(checkbox);
4. Затем вы создаете QButtonGroup для двух ваших радиокнопок (переключателей).
QButtonGroup *buttongroup = new QButtonGroup(0);
radiobutton1 = new QRadioButton("RadioButton1", widget, "radio1");
buttongroup->insert(radiobutton1);
vbox->addWidget(radiobutton1);
radiobutton2 = new QRadioButton("RadioButton2", widget, "radio2");
buttongroup->insert(radiobutton2);
vbox->addWidget(radiobutton2);