Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: serg_hd от Ноября 24, 2009, 21:56



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


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

Да особо не понятно в чем проблема
1) получая сигнал проверяй что кнопка уже вдавлена и делай return - получить объект от которого произошел вызов слота можно через QObject::sender
2) делай кнопки checkable=true и вручную в обработчике каждой отжимай другую через setChecked и ничего само никогда не буудет отжиматься..


Название: Re: Кнопки и setDown()
Отправлено: spectre71 от Ноября 25, 2009, 10:33
2) делай кнопки checkable=true и вручную в обработчике каждой отжимай другую через setChecked и ничего само никогда не буудет отжиматься..

Вообще-то для таких целей есть QButtonGroup, QActionGroup, QGroupBox


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


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

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


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

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

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

QButtonGroup, QActionGroup, QGroupBox


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

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

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

QButtonGroup, QActionGroup, QGroupBox

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

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


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

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

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

QButtonGroup, QActionGroup, QGroupBox

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

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

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


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

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

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

QButtonGroup, QActionGroup, QGroupBox

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

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

Раз не понимаешь как простым способом решается задача нечего лезть, поскольку простой ответ уже был дан, а ты только сбиваешь человека с толку.
Чел, ты чего фулиганишь? ;) Расслабься :)
У нас странна свободная, мнение высказывать не запрещено. А если еще и учесть что это форум, то уухх...он же для того и создан! Уау!


Название: Re: Кнопки и setDown()
Отправлено: serg_hd от Ноября 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;
 }
Господа, не ссорьтесь, вопрос решён - всем спасибо за помощь!