Russian Qt Forum
Ноябрь 25, 2024, 23:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как реализовать QGroupBox c QPushButton, чтобы кнопки зажимались как RadioButton  (Прочитано 10155 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Ноябрь 19, 2014, 17:27 »

Как можно реализовать GroupBox с кнопками, чтобы при выборе одной кнопки она зажималась, и в дальнейшем при выборе последующих, предыдущая отжималась, а выбранная зажималась? Какой флаг нужно установить для QGroupBox? быть может
нужно использовать свойство isChecked?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 19, 2014, 18:00 »

Эээ... добавить QRadioButton кнопки в QButtonGroup
Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Ноябрь 20, 2014, 00:52 »

Эээ... добавить QRadioButton кнопки в QButtonGroup
Дело в том, что мне не нужны QRadioButton кнопки, я хочу это сделать для QPushButton.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Ноябрь 20, 2014, 01:45 »

в чём проблема?

в конструкторе:
Код
C++ (Qt)
   QButtonGroup *group = new QButtonGroup(this);
   connect(group, SIGNAL(buttonClicked(QAbstractButton*)),
           this, SLOT(onButtonClicked(QAbstractButton*)));
   group->addButton(pushButton_1);
   group->addButton(pushButton_2);
   group->addButton(pushButton_3);
   //....
   group->addButton(pushButton_n);
 
в cлоте onButtonClicked(QAbstractButton*):
Код
C++ (Qt)
void SomeClass::onButtonClicked(QAbstractButton *button)
{
   QButtonGroup *group = qobject_cast<QButtonGroup*>(sender());
   if (group) {
       Q_FOREACH(QAbstractButton *b, group->buttons()) {
           b->blockSignals(true);
           b->setChecked(b == button);
           b->blockSignals(false);
       }
   }
}
 
Естественно у кнопок свойство checkable выставить в true.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #4 : Ноябрь 20, 2014, 01:56 »

спасибо) используя ваши советы, уже сделал вот так:
Код:
    QGridLayout *layout = new QGridLayout;
    layout->setSpacing(3);
    layout->setDefaultPositioning(3, Qt::Horizontal);

    QGroupBox *box = new QGroupBox(this);
    box->setFixedSize(200, 200);
    box->move(20, 20);
    box->setLayout(layout);

    QButtonGroup *grp = new QButtonGroup(box);
    grp->setExclusive(true);

    QPushButton *but[4];
    for(int i=0; i<4; i++){
        but[i] = new QPushButton(box);
        but[i]->setFixedSize(50, 30);
        but[i]->setText(QString::number(i+1));
        but[i]->setCheckable(true);
        grp->addButton(but[i], i);
        layout->addWidget(but[i]);
    }
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #5 : Ноябрь 20, 2014, 09:38 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Ноябрь 20, 2014, 12:03 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?

Неа, посмотрите в документацию и вы увидите, что QLabel'ы не кликабельны Улыбающийся
А как вы представляете себе нажатый QLabel? Улыбающийся
Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #7 : Ноябрь 20, 2014, 12:59 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?

Неа, посмотрите в документацию и вы увидите, что QLabel'ы не кликабельны Улыбающийся
А как вы представляете себе нажатый QLabel? Улыбающийся
в некоторых средах разработки это возможно, он просто вокруг выделяется пунктирной линией когда выбран.
Записан
Johnik
Крякер
****
Online Online

Сообщений: 339


Просмотр профиля
« Ответ #8 : Ноябрь 20, 2014, 13:32 »

... он просто вокруг выделяется пунктирной линией когда выбран.
Так можно сделать из QPushButton
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #9 : Ноябрь 20, 2014, 13:36 »

ясно
Записан
DenKor29
Гость
« Ответ #10 : Ноябрь 21, 2014, 08:18 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?

Неа, посмотрите в документацию и вы увидите, что QLabel'ы не кликабельны Улыбающийся
А как вы представляете себе нажатый QLabel? Улыбающийся

Вроде QLabel кликабелен. Можно реализовать гиперссылки.

void QLabel::linkActivated ( const QString & link ) [signal]

This signal is emitted when the user clicks a link. The URL referred to by the anchor is passed in link.

This function was introduced in Qt 4.2.
Записан
Bepec
Гость
« Ответ #11 : Ноябрь 21, 2014, 11:47 »

Я по секрету скажу что все виджеты кликабельны Улыбающийся
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #12 : Ноябрь 21, 2014, 13:56 »

 Улыбающийся ну это понятно)
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #13 : Ноябрь 22, 2014, 00:27 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?

Неа, посмотрите в документацию и вы увидите, что QLabel'ы не кликабельны Улыбающийся
А как вы представляете себе нажатый QLabel? Улыбающийся
в некоторых средах разработки это возможно, он просто вокруг выделяется пунктирной линией когда выбран.

Это вы про дизайнеры форм? QLabel везде одинаковый, а в дизайнерах, я уверен, используется графические сцены, а учитывая что на сцены можно размещать и виджеты и элементы сцены все перемещаемые и выделяемые Улыбающийся

Вы можете реализовать свой класс QLabel и в нем переопределить событие paintEvent и вручную нарисовать рамку
Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #14 : Ноябрь 24, 2014, 09:05 »

а как такую же группу создать для QLabel-ов? или они вообще не могут быть нажатыми и отжатыми?

Неа, посмотрите в документацию и вы увидите, что QLabel'ы не кликабельны Улыбающийся
А как вы представляете себе нажатый QLabel? Улыбающийся
в некоторых средах разработки это возможно, он просто вокруг выделяется пунктирной линией когда выбран.

Это вы про дизайнеры форм? QLabel везде одинаковый, а в дизайнерах, я уверен, используется графические сцены, а учитывая что на сцены можно размещать и виджеты и элементы сцены все перемещаемые и выделяемые Улыбающийся

Вы можете реализовать свой класс QLabel и в нем переопределить событие paintEvent и вручную нарисовать рамку
спасибо за совет)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.182 секунд. Запросов: 23.