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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Отжать кнопку QToolButton  (Прочитано 17833 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Сентябрь 29, 2014, 16:02 »

Всем привет!
Подскажите, как отжать кнопку QToolButton и спрятать встроенный в нее QWidget при нажатии на одну из кнопок Ча, Чb..
ui->btnQuickFreq->setChecked(false); не помогает! В замешательстве
ui->btnQuickFreq - это QToolButton.
« Последнее редактирование: Октябрь 02, 2014, 09:48 от Vladimir » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Сентябрь 29, 2014, 23:07 »

Кнопки объедены  в QButtonGroup?
если да, то так:

Код
C++ (Qt)
group->setExclusive(false);
button->setChecked(false);
group->setExclusive(true);
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Сентябрь 30, 2014, 11:35 »

Кнопки объедены  в QButtonGroup?
если да, то так:

Код
C++ (Qt)
group->setExclusive(false);
button->setChecked(false);
group->setExclusive(true);

да, объеденены в btnGroupQuickFreq. но это не помогло  Обеспокоенный кнопка не отжимается и виджет не прячется!
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #3 : Сентябрь 30, 2014, 16:28 »

есть еще варианты??
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Сентябрь 30, 2014, 16:57 »

есть еще варианты??
А в чём сложность найти от нажатой кнопки (Ча, Чb..) QMenu и спратать его?
Записан

Qt 5.11/4.8.7 (X11/Win)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #5 : Сентябрь 30, 2014, 22:10 »

есть еще варианты??
А в чём сложность найти от нажатой кнопки (Ча, Чb..) QMenu и спратать его?

Не совсем понял мысль..Кнопки делались так
Код:
        wChangeQFreq = new QWidget(this);
        btnGroupQuickFreq = new QButtonGroup(this);
        btnGroupQuickFreq->setObjectName("btnGroupQuickFreq");

        QHBoxLayout *layout   = new QHBoxLayout(wChangeQFreq);
        layout->setMargin (2);
        layout->setSpacing(2);

        for(int i = 0; i < NUMB_BTN_QUICK_FREQ; i++)
        {
            btnFreqQuickSelector.push_back(new QPushButton(this));
            btnFreqQuickSelector[i]->setObjectName(QString("btnFreqQS%1").arg(i));
            btnFreqQuickSelector[i]->setText(aws->workFreqsAWS.titleNameQuickFreqs[i]);
            btnFreqQuickSelector[i]->setFixedSize(40,40);
            btnFreqQuickSelector[i]->setCheckable(true);

            layout->addWidget(btnFreqQuickSelector[i]);
            btnGroupQuickFreq->addButton(btnFreqQuickSelector[i],i);
        }

        QWidgetAction *actQFreq = new QWidgetAction(this);
        actQFreq->setDefaultWidget(wChangeQFreq);
        ui->btnQuickFreq->addAction(actQFreq);

Вы предлагаете сделать что-то типо:
Код:
QMenu *menu = btnFreqQuickSelector[id_btn]->menu();
menu->hide();
так вылетает на hide()! Или как?
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #6 : Октябрь 01, 2014, 06:42 »

при чем тут:
Цитировать
ui->btnQuickFreq - это QToolButton
когда в QButtonGroup вы запихиваете QPushButton'ы

наведите порядок в коде, и приведенный мной код будет работать.
можно еще так:
Код
C++ (Qt)
group->setExclusive(false);
group->checkedButton()->setChecked(false);
group->setExclusive(true);
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

так вылетает на hide()! Или как?
А никак! Коли не в состоянии привести нормальный код.
Записан

Qt 5.11/4.8.7 (X11/Win)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #8 : Октябрь 01, 2014, 11:39 »

при чем тут:
Цитировать
ui->btnQuickFreq - это QToolButton
когда в QButtonGroup вы запихиваете QPushButton'ы

наведите порядок в коде, и приведенный мной код будет работать.
можно еще так:
Код
C++ (Qt)
group->setExclusive(false);
group->checkedButton()->setChecked(false);
group->setExclusive(true);

так, а что не понятно из кода? ui->btnQuickFreq - это кнопка QToolButton(это я уточнил в самом первом посте). и именно ее мне нужно отжать, а не кнопки группы. т.е. я нажал, на Ча, Чб.. и у меня должна отжаться кнопка БЧ(ui->btnQuickFreq) и спрятаться виджет с кнопками Ча, Чб.. То что нужно отжимать кн-ки Ча, Чб.. так это работает из-за группы и оно реализовано. мне нужно отжать как бы "родителя" - кн-ку БЧ и спрятать виджет!
« Последнее редактирование: Октябрь 01, 2014, 11:43 от Vladimir » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Октябрь 01, 2014, 11:43 »

ui->btnQuickFreq - это кнопка QToolButton
Ну так и делай
Код
C++ (Qt)
ui->btnQuickFreq->menu()->hide().
Записан

Qt 5.11/4.8.7 (X11/Win)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #10 : Октябрь 01, 2014, 11:46 »

ui->btnQuickFreq - это кнопка QToolButton
Ну так и делай
Код
C++ (Qt)
ui->btnQuickFreq->menu()->hide().

не нравится ему так - вылетает программа..оно то вроде как меню у кнопки (выглядит так), но туда засунут целый QWidget.
может поэтому
« Последнее редактирование: Октябрь 01, 2014, 11:49 от Vladimir » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Октябрь 01, 2014, 11:53 »

не нравится ему так - вылетает программа..
Коли ui->btnQuickFreq - QToolButton c выставленным popupMode() и заданным menu(), то значит что-то накосячил или недоговариваешь.

UPD
оно то вроде как меню у кнопки (выглядит так), но туда засунут целый QWidget.
может поэтому
Нет не поэтому.
« Последнее редактирование: Октябрь 01, 2014, 11:55 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #12 : Октябрь 01, 2014, 12:07 »

не нравится ему так - вылетает программа..
Коли ui->btnQuickFreq - QToolButton c выставленным popupMode() и заданным menu(), то значит что-то накосячил или недоговариваешь.

Да, ui->btnQuickFreq - это кнопка QToolButton, созданная в дизайнере и у нее popupMode = InstantPopup, есть еще MenuButtonPopup, тогда кнопка выглядит не очень-то красиво, но даже с этим свойством вылетает при попытке спрятать меню. а, что значит заданным меню, это какое поле??! параметры меню для кнопки я никакие специально не задавал..
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

а, что значит заданным меню, это какое поле??! параметры меню для кнопки я никакие специально не задавал..
Понятно. Похоже Qt за тебя это сделал.
Попробуй
Код
C++ (Qt)
ui->btnQuickFreq->actions().first()->menu()->hide();
Записан

Qt 5.11/4.8.7 (X11/Win)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #14 : Октябрь 01, 2014, 12:35 »

а, что значит заданным меню, это какое поле??! параметры меню для кнопки я никакие специально не задавал..
Понятно. Похоже Qt за тебя это сделал.
Попробуй
Код
C++ (Qt)
ui->btnQuickFreq->actions().first()->menu()->hide();

не помогает  В замешательстве вылетает!
Наврят ли сделал
qDebug() << ui->btnQuickFreq->menu();  ===> QObject(0x0)
« Последнее редактирование: Октябрь 01, 2014, 12:49 от Vladimir » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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