Как можно отключить стандартный кружок QRadioButton?

Здравствуйте! Можете помочь мне убрать стандартный индикатор из переключателя и оставить только текст, выровненный по центру? 

Вот часть кода: 
<pre><code class="cpp">// Макет для переключателей фильтров
    QHBoxLayout *filterButtonsLayout = new QHBoxLayout();
    filterButtonsLayout-&gt;setSpacing(5); // Расстояние между переключателями
    filterButtonsLayout-&gt;setContentsMargins(0, 10, 0, 0); // Устанавливаем отступ сверху

// Создаем группу для переключателей
    QButtonGroup *filterGroup = new QButtonGroup(this);

// Переключатели фильтров
    for (int i = 1; i &lt;= 4; ++i) {
        QRadioButton *filterButton = new QRadioButton("FILTER " + QString::number(i));
        filterButton-&gt;setFixedWidth(102);
        filterButton-&gt;setStyleSheet(
                "QRadioButton {"
                "  color: #FFFFFF;"
                "  border: 1px solid #267189;"
                "  background-color: transparent;"
                "  border-radius: 5px;"
                "  padding: 5px 10px;"
                "  text-align: center;" // Выравнивание текста по центру
                "}"
                "QRadioButton:hover {"
                "  background-color: #267189;"
                "  color: white;"
                "}"
                "QRadioButton:checked {"
                "  background-color: #267189;" // Цвет для выбранного переключателя
                "  color: white;"
                "}"
                "QRadioButton::indicator {"
                "  width: 0px;"  // Скрываем индикатор переключателя
                "  height: 0px;" // Скрываем индикатор переключателя
                "}");

        filterButtonsLayout-&gt;addWidget(filterButton);
        filterButtonsLa
  • 30 сентября 2024 г. 19:13
Ответы на вопрос 2
Чтобы отключить стандартный индикатор в `QRadioButton` и оставить только текст, вы можете использовать стилизацию через QSS (Qt Style Sheets). В вашем коде вы уже сделали большую часть работы, но есть некоторые нюансы.

Во-первых, чтобы полностью убрать индикатор, нужно использовать `QRadioButton::indicator`, и не только установить его ширину и высоту в 0, но также установить его видимость в `hidden` или задать `display: none;`. Таким образом, индикатор не будет отображаться.

Ваш обновлённый код с правильной стилизацией может выглядеть так:

```cpp
// Макет для переключателей фильтров
QHBoxLayout *filterButtonsLayout = new QHBoxLayout();
filterButtonsLayout->setSpacing(5); // Расстояние между переключателями
filterButtonsLayout->setContentsMargins(0, 10, 0, 0); // Устанавливаем отступ сверху

// Создаем группу для переключателей
QButtonGroup *filterGroup = new QButtonGroup(this);

// Переключатели фильтров
for (int i = 1; i <= 4; ++i) {
    QRadioButton *filterButton = new QRadioButton("FILTER " + QString::number(i));
    filterButton->setFixedWidth(102);
    filterButton->setCursor(Qt::PointingHandCursor); // Установим указатель на руки при наведении

    filterButton->setStyleSheet(
        "QRadioButton {"
        "  color: #FFFFFF;"
        "  border: 1px solid #267189;"
        "  background-color: transparent;"
        "  border-radius: 5px;"
        "  padding: 5px 10px;"
        "  text-align: center;" // Выравнивание текста по центру
        "}"
        "QRadioButton:hover {"
        "  background-color: #267189;"
        "  color: white;"
        "}"
        "QRadioButton:checked {"
        "  background-color: #267189;" // Цвет для выбранного переключателя
        "  color: white;"
        "}"
        "QRadioButton::indicator {"
        "  width: 0px;"
        "  height: 0px;"
        "  background: transparent;"
        "  border: none;"
        "  visibility: hidden;" // Скрываем индикатор переключателя
        "}");

    filterButtonsLayout->addWidget(filterButton);
    filterGroup->addButton(filterButton);
}
```

Обратите внимание на изменения:
- Добавлен `visibility: hidden;` для `QRadioButton::indicator`, чтобы полностью скрыть индикатор.
- Установили курсор в `Qt::PointingHandCursor`, чтобы пользователи знали, что элемент интерактивный.

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