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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кнопки и setDown()  (Прочитано 5918 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Ноябрь 24, 2009, 21:56 »

Всем привет. Есть 2 кнопки, например "start" и "stop". При применении setDown(true) к "start" она вдавливается, если применять к "stop" кнопка "start" соответственно выдавливается, т.е. принимает своё первоначальное состояние, ну и наоборот. Проблема в том, что:
1) когда кнопки вдавлены, и в это время на них кликать, сигналы всё равно от них испускаются - это не нужно.
2) если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится".
Есть какие-нибудь предложения, в какую сторону хотя бы думать?
п.с. извиняюсь если что непонятно изложил, использую qt jambi
« Последнее редактирование: Ноябрь 25, 2009, 00:50 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Ноябрь 25, 2009, 03:30 »

Цитировать
1) когда кнопки вдавлены, и в это время на них кликать, сигналы всё равно от них испускаются - это не нужно.
2) если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится".

Да особо не понятно в чем проблема
1) получая сигнал проверяй что кнопка уже вдавлена и делай return - получить объект от которого произошел вызов слота можно через QObject::sender
2) делай кнопки checkable=true и вручную в обработчике каждой отжимай другую через setChecked и ничего само никогда не буудет отжиматься..
Записан
spectre71
Гость
« Ответ #2 : Ноябрь 25, 2009, 10:33 »

2) делай кнопки checkable=true и вручную в обработчике каждой отжимай другую через setChecked и ничего само никогда не буудет отжиматься..

Вообще-то для таких целей есть QButtonGroup, QActionGroup, QGroupBox
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Ноябрь 25, 2009, 15:18 »

setChecked вдавливает кнопку и setDown - в чём разница? (наверно в том, что setChecked() удобно использовать при QButtonGroup, т.е. выбрана ведь может быть только одна в то время как setDown() может быть применена ко всем из QButtonGroup)
« Последнее редактирование: Ноябрь 25, 2009, 15:46 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
niXman
Гость
« Ответ #4 : Ноябрь 25, 2009, 15:26 »

Организовать RS-тригер(из области электроники).
А по поводу: "сигналы всё равно от них испускаются - это не нужно" - либо сабкласиться, либо installEventFilter(), и отлавливать сигналы типа clicked() и т.п.

По поводу: "если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится"" - нужно посмотреть какие сигналы испускаются. От этого и плясать, аля QEvent::accept()
Записан
spectre71
Гость
« Ответ #5 : Ноябрь 25, 2009, 17:33 »

Организовать RS-тригер(из области электроники).
А по поводу: "сигналы всё равно от них испускаются - это не нужно" - либо сабкласиться, либо installEventFilter(), и отлавливать сигналы типа clicked() и т.п.

По поводу: "если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится"" - нужно посмотреть какие сигналы испускаются. От этого и плясать, аля QEvent::accept()

Не пудри мозги.

QButtonGroup, QActionGroup, QGroupBox
Записан
niXman
Гость
« Ответ #6 : Ноябрь 25, 2009, 17:35 »

Организовать RS-тригер(из области электроники).
А по поводу: "сигналы всё равно от них испускаются - это не нужно" - либо сабкласиться, либо installEventFilter(), и отлавливать сигналы типа clicked() и т.п.

По поводу: "если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится"" - нужно посмотреть какие сигналы испускаются. От этого и плясать, аля QEvent::accept()

Не пудри мозги.

QButtonGroup, QActionGroup, QGroupBox

Не флуди! Тебя все "слышали".

Это мое мнение.
Записан
spectre71
Гость
« Ответ #7 : Ноябрь 25, 2009, 17:44 »

Организовать RS-тригер(из области электроники).
А по поводу: "сигналы всё равно от них испускаются - это не нужно" - либо сабкласиться, либо installEventFilter(), и отлавливать сигналы типа clicked() и т.п.

По поводу: "если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится"" - нужно посмотреть какие сигналы испускаются. От этого и плясать, аля QEvent::accept()

Не пудри мозги.

QButtonGroup, QActionGroup, QGroupBox

Не флуди! Тебя все "слышали".

Это мое мнение.

Раз не понимаешь как простым способом решается задача нечего лезть, поскольку простой ответ уже был дан, а ты только сбиваешь человека с толку.
Записан
niXman
Гость
« Ответ #8 : Ноябрь 25, 2009, 18:37 »

Организовать RS-тригер(из области электроники).
А по поводу: "сигналы всё равно от них испускаются - это не нужно" - либо сабкласиться, либо installEventFilter(), и отлавливать сигналы типа clicked() и т.п.

По поводу: "если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится"" - нужно посмотреть какие сигналы испускаются. От этого и плясать, аля QEvent::accept()

Не пудри мозги.

QButtonGroup, QActionGroup, QGroupBox

Не флуди! Тебя все "слышали".

Это мое мнение.

Раз не понимаешь как простым способом решается задача нечего лезть, поскольку простой ответ уже был дан, а ты только сбиваешь человека с толку.
Чел, ты чего фулиганишь? Подмигивающий Расслабься Улыбающийся
У нас странна свободная, мнение высказывать не запрещено. А если еще и учесть что это форум, то уухх...он же для того и создан! Уау!
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #9 : Ноябрь 25, 2009, 18:46 »

Для взаимоисключающего нажатия применил QButtonGroup. isChecked() - для выяснения состояния кнопки (слать сигнал или нет). Вкрадце:
Код:
QButtonGroup bgroup = new QButtonGroup(tab);
startButton = new QPushButton(tab);
stopButton = new QPushButton(tab);
startButton.setCheckable(true); //для QPushButton по умолчанию false
stopButton.setCheckable(true);
Сигнал/слот одной из них
Код:
_form.startButton.pressed.connect(this, "startThreads()");
ну и сам метод
Код:
 public synchronized void startThreads()
 {
  if (!_form.startButton.isChecked())
  {
   //do something
  }
  else return;
 }
Господа, не ссорьтесь, вопрос решён - всем спасибо за помощь!
« Последнее редактирование: Ноябрь 25, 2009, 18:50 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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