crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPushButton и QAction
Sokoloff
  опции профиля:
сообщение 2.7.2009, 19:09
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Что-то не найду, можно привязать QPushButton к QAction, чтоб доступность кнопки менялась в зависимости от enabled для QAction.
Пытался вьехать в QWidget::addAction, но что-то не пойму "All QWidgets have a list of QActions" это как? Как, скажем кнопка, может иметь несколько action? Или это вообще из другой оперы? Может кто просветит меня по этому вопросу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.7.2009, 5:47
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Sokoloff @ 2.7.2009, 23:09) *
Или это вообще из другой оперы?
скорее так.

Действия (QAction), нужны для меню, панели меню и панели инструментов. Эта абстракция позволяет воедино связать текст (с акселератором) в меню, значёк (QIcon) и комбинацию горячих клавиш.

Объясни конечную цель, подскажим как сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.7.2009, 8:27
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Sokoloff,
да, виджеты могут иметь список действий.
добавляешь действие в виджет, если виджет ловит событие вызывающее действие(обычно уникальная комбинация клавиш, щелчок мышкой в меню и т.д.) то действие посылает сигнал.
ни как со стандартным поведением виджетов кнопок и т.д. действия не связаны.
разработчик сам может добавлять изменять активировать и т.д. действия.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 3.7.2009, 9:26
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(Litkevich Yuriy @ 3.7.2009, 6:47) *
Цитата(Sokoloff @ 2.7.2009, 23:09) *
Или это вообще из другой оперы?
скорее так.

Действия (QAction), нужны для меню, панели меню и панели инструментов. Эта абстракция позволяет воедино связать текст (с акселератором) в меню, значёк (QIcon) и комбинацию горячих клавиш.

Объясни конечную цель, подскажим как сделать.


Для чего нужны QAction я знаю. Меня интересовало как связать action и обычную кнопку(QPushButton). Сейчас я сделал так:
def setMenu(self):
   ...
   self._actConvert = QtGui.QAction(KIcon('arrow-right'), i18n('Convert'), self)
   self.connect(self._actConvert, QtCore.SIGNAL('changed()'), self.actConvertChanged)
   ...

def actConvertChanged(self):
    self.form.button.setText(self._actConvert.text())
    self.form.button.setIcon(self._actConvert.icon())
    self.form.button.setEnabled(self._actConvert.isEnabled())


Все работает, но может есть более простое/прямое решение.

Отдельный вопрос вызвала фунция actions у QWidget, что это, для чего это?

Цитата(kwisp @ 3.7.2009, 9:27) *
да, виджеты могут иметь список действий.
добавляешь действие в виджет, если виджет ловит событие вызывающее действие(обычно уникальная комбинация клавиш, щелчок мышкой в меню и т.д.) то действие посылает сигнал.
ни как со стандартным поведением виджетов кнопок и т.д. действия не связаны.
разработчик сам может добавлять изменять активировать и т.д. действия.


Принцип работы QAction мне понятен. Не понятно где это может применяться на практике(кроме главного окна). Можешь привести пример, для чего может понадобиться определить свои actions у какого-то виджета на форме?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.7.2009, 10:41
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Sokoloff, если честно то я всё равно не понял конечную цель.

Может нужно всего лишь соеденить сигнал
void QAction::toggled ( bool checked ) или void QAction::triggered ( bool checked = false )
со слотом
void QWidget::setEnabled ( bool )

??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.7.2009, 11:46
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Sokoloff @ 3.7.2009, 10:26) *
Можешь привести пример, для чего может понадобиться определить свои actions у какого-то виджета на форме?

стандартных примеров мало?
там чуть ли в каждом проекте действия есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Troeshnik
  опции профиля:
сообщение 3.7.2009, 13:26
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 23.3.2008
Пользователь №: 130

Спасибо сказали: 1 раз(а)




Репутация:   1  


Нужно использовать функцию
void QToolButton::setDefaultAction ( QAction * action )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 3.7.2009, 16:45
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(Troeshnik @ 3.7.2009, 14:26) *
Нужно использовать функцию
void QToolButton::setDefaultAction ( QAction * action )


Это для ToolButton а меня интересовало для PushButton. Ладно, я остановился на варианте со слотами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 4:41