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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Управление поведением кнопок  (Прочитано 6970 раз)
lighting
Гость
« : Сентябрь 30, 2010, 15:41 »

Есть некий внешний объект которым я управляю из программы. Логика управления как у выключателя - при нажатии посылается команда устройству, если оно его обработало кнопка вдавливается, если сновать нажать то посылается другая команда и в случае успеха кнопка выдавливается обратно. В случае-же если команда не обработана - кнопка свое состояние менять не должна.
Задача вроде-бы простая, но с помощью PushButton ее у меня решить не получается - пробовал и Checkable и  setDown, в обоих случаях кнопка реагирует на нажатия немедленно. Можно конечно заменить кнопку на QLabel  и обрабатывать событие нажатия мыши, но хотелось-бы всетаки сделать это через PushButton
Версия Qt 4.5
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Сентябрь 30, 2010, 15:47 »

QToolButton, QToolButton::setChecked()
Записан

Qt 5.11/4.8.7 (X11/Win)
lighting
Гость
« Ответ #2 : Сентябрь 30, 2010, 16:06 »

А можно поподробнее? Как заставить toolButton не нажиматься до тех пор пока не придет ответ от управляемого устройства? На события мышки она реагирует немедленно тут-же нажимаясь.
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



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

А чем не устраивает простое блокирование/разблокирование кнопки при помощи метода setEnabled(false | true)? Вы же все равно как-то обрабатываете ответ от управляемого устройства, вот и можете при этом ещё и разблокировать кнопку.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
lighting
Гость
« Ответ #4 : Сентябрь 30, 2010, 23:08 »

Во-первых у Diasbled кнопки внешний вид другой, а во-вторых АФАИК такая кнопка события мыши не принимает.
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



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

А вам разве не надо как раз таки НЕ принимать события мыши некоторое время?

Цитировать
Как заставить toolButton не нажиматься до тех пор пока не придет ответ от управляемого устройства?

Отправили сигнал устройству -- вдавили и задизаблили кнопку.
Получили ответ от устройства -- отдизаблили кнопкуи оставили её вдавленной (isChecked) если  необходимо.
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
lighting
Гость
« Ответ #6 : Октябрь 01, 2010, 08:42 »

В том-то и дело что сигнал отправляется по нажатию. В предлагаемом вам варианте либо сигнал отправить не удастся (кнопка задизаблена) либо при нажатии кнопка сразу вдавиться даже если первой командой в слоте будет pushButton.setEnabled(false) и уже потом она станет неактивной. Мне-же надо чтобы она вообще не нажималась, точнее чтобы от мышки она только события принимала, а все действия (нажатие, отжатие) только по ответу от управляемого устройства.

Видимо придется взять QLabel и нужную мне логику работы реализовывать вручную.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #7 : Октябрь 03, 2010, 00:53 »

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

Но если тебе всё-таки эта идея нравится, можешь перехватить клики мыши по кнопке через installEventFilter и в саму кнопку их не пускать, соответственно она нажиматься сама не будет, тогда сможешь рулить ей через setChecked...
Записан

Гугль в помощь
lighting
Гость
« Ответ #8 : Октябрь 04, 2010, 08:51 »

Цитата: navrocky
Не хорошо это блокировать нажатия кнопки, пользователь будет думать что у него мышь поломалась.
В некоторых случаях это меньшее из зол, куда хуже будет если кнопка нажмется, оператор будет уверен что все нормально, а команда не пройдет.
За EventFilter спасибо, попробую.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #9 : Октябрь 04, 2010, 09:56 »

Цитировать
В некоторых случаях это меньшее из зол, куда хуже будет если кнопка нажмется, оператор будет уверен что все нормально, а команда не пройдет.
Ну так отожми ее и кинь сообщение об ошибке, например, через QMessageBox.
Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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