Шаг 41.
Библиотека Qt.
Класс QRadioButton

    На этом шаге рассмотрим класс виджета переключателя QRadioButton.

    Свое название — radio button — виджет переключателя получил благодаря своей схожести с кнопками радиоприемника, на панели которого может быть нажата только одна из кнопок. Нажатие на другую кнопку радиоприемника приводит к тому, что в группе автоматически отключается кнопка, нажатая до этого.

    Переключатель представляет собой виджет (рис. 1), который может находиться в одном из двух состояний: включено (on) или выключено (off). Эти состояния пользователь может устанавливать с помощью мыши или клавиши Пробел, когда кнопка находится в фокусе. Класс QRadioButton виджета переключателя определен в заголовочном файле QRadioButton.

    Этот виджет должен предоставлять пользователю, по меньшей мере, выбор одной из двух альтернатив. Виджеты переключателей не могут использоваться в отдельности и должны быть сгруппированы вместе. Их группировку можно выполнить, например, при помощи класса QGroupBox.

    Поясняющие надписи должны быть определены для каждого используемого в группе переключателя, а также желательно задать и сочетания клавиш для быстрого доступа к каждому из переключателей. Это достигается включением в надпись символа & перед нужной буквой.


Рис.1. Переключатели

    В листинге приводится текст заголовочного файла приложения, окно которого показано на рис. 1:

#ifndef RB_H
#define RB_H

#include <QWidget<

class QGroupBox;
class QRadioButton;
class QPalette;
class QPushButton;
class QLabel;
//объявляем класс rb, производный от класса QWidget
class rb:public QWidget
{
//макрос Q_OBJECT задаем в начале определения
//класса, т.к. он содержит слот
    Q_OBJECT
private:
//объявляем переменные
    QGroupBox *gb;
    QRadioButton *rbred;
    QRadioButton *rbgreen;
    QRadioButton *rbblue;
    QLabel *l;
    QPushButton *bclose;
public:
//конструктор класса, параметр parent
//указывает на родительский виджет (равен 0)
//создается виджет верхнего уровня
    rb(QWidget *parent=0);
private slots:
//в закрытой секции класса объявляем слот
    void ris();
};

#endif // RB_H

    В листинге приводится текст файла, в которм находится реализация класса rb:

#include "rb.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QLabel>
//реализация конструктора класса
rb::rb(QWidget *parent):QWidget (parent)
{
    //создаем группировку кнопок
    gb= new QGroupBox("&Цвет");
    //создаем три переключателя
    rbred = new QRadioButton("&Красный");
    rbgreen = new QRadioButton("&Зеленый");
    rbblue = new QRadioButton("&Синий");
    //устанавливаем переключатель во включенное состояние
    rbgreen->setChecked(true);
    //создаем надпись, отображающую текст в html-формате
    l=new QLabel ("<P ALIGN=CENTER><FONT COLOR=GREEN>
                  Надпись<BR>зеленого<BR>цвета</FONT></P>");
    //закрытый слот ris() вызывается при щелчке на переключателях
    connect(rbred,SIGNAL(clicked()),SLOT(ris()));
    connect(rbgreen,SIGNAL(clicked()),this,SLOT(ris()));
    connect(rbblue,SIGNAL(clicked()),this,SLOT(ris()));

    QHBoxLayout* phbxLayout = new QHBoxLayout;
    QVBoxLayout* pvbxLayout = new QVBoxLayout;
    pvbxLayout->addWidget(rbred);
    pvbxLayout->addWidget(rbgreen);
    pvbxLayout->addWidget(rbblue);
    gb->setLayout(pvbxLayout);
    phbxLayout->addWidget(gb);
    phbxLayout->addWidget(l);
    setLayout(phbxLayout);
}
//описание слота: в зависимости от выбранного переключателя
//изменяются цвет надписи и ее текст
void rb::ris()
{
   if(rbred->isChecked())
   {
       l->setText("<P ALIGN=CENTER><FONT COLOR=RED>
                     Надпись<BR>красного<BR>цвета</FONT></P>");
   }
   else
   {
       if(rbblue->isChecked())
       {
           l->setText("<P ALIGN=CENTER><FONT COLOR=Blue>
                         Надпись<BR>синего<BR>цвета</FONT></P>");
       }
       else
           l->setText("<P ALIGN=CENTER><FONT COLOR=GREEN>
                         Надпись<BR>зеленого<BR>цвета</FONT></P>");
   }
}

    Рассмотрим текст файла main.cpp:

#include <QApplication>
#include "rb.h"
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    app.setApplicationDisplayName("Переключатели");
    //создаем объект класса rb
    rb rb;
    rb.resize(300,150);
    rb.show();
    return app.exec();
}

    Файлы приложения можно взять здесь.

    На следующем шаге рассмотрим группировку кнопок.




Предыдущий шаг Содержание Следующий шаг