Russian Qt Forum
Июля 03, 2025, 13:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши?  (Прочитано 13469 раз)
Bepec
Гость
« Ответ #15 : Января 14, 2012, 18:16 »

Пытон, ты читаешь между строк.

Тебе нужно:
1. поставить стандартный (стандартный) виджет на форму.
2. потом создать 1 файл, в котором ты создашь класс - наследник от QListWidget(или любого другого виджета)
3. в этом файле переопределяешь 1 функцию (keyPressReleased к примеру)
4. далее, в Designer'e щелкаешь на виджете - Promote to...
5. пишешь там название своего файла.
6. запускаешь и радуешься тому, что твой QListWidget перехватывает отжатия клавиш.

PS ты ручками много напишешь, а вот если нужно будет сделать как надо дизайнеру, ты укопечёшься кодом переписывать. А так дал ему ui, пусть тягает как хочет. Хоть туда, хоть обратно, но программа у тебя меняться не будет никоим образом.
Записан
Пытон
Гость
« Ответ #16 : Января 14, 2012, 19:24 »

Эдак у меня будет два py-файла вместо одного. При редактировании программы оба файла нужно будет держать открытыми.
Попробую завтре. Поглядим насколько это удобно...  В замешательстве
Записан
Bepec
Гость
« Ответ #17 : Января 14, 2012, 20:21 »

Понимаешь, в коде создавать все виджеты это хорошо.
Но как только начнётся - сдвинь на 2 мм вправо один, второй расширь на ... ммм, вот столько *показывает пальцами*, а потом покажи мне я ещё что нить скажу Улыбающийся
Это норм, если прога твоя без дизайнера или маркетолога разрабатывается. А вот у мну на каждую поправку служебку приносят Веселый Я её оприходываю, добавляю изменения(две цифры), составляю ответ на служебку, отправляю. А если понравится на данный момент, то всё это нужно оформлять в архив Веселый
А через пару дней, когда новую версию посмотрят наконец, всё заного, только мм в другую сторону Веселый

Гораздо проще пригласить к себе маркетолога на часик ^^ И за 10 минут всё переделать, без изменения исходного кода и дооолгих компиляций.
Записан
Пытон
Гость
« Ответ #18 : Января 14, 2012, 21:54 »

Я программист-любитель, и хоть мои программы и используются в реальной работе, меня такие ужасы не касаются.  Шокированный

Насчёт "в коде создавать все виджеты - это хорошо". Дык я и хочу их создавать не в коде, а в дизайнере, а в коде лишь подпиливать их напильничком: методы им переопределять. Да только вон тут (в Qt) какие заковырки. Которые завтра буду опробовать...
Записан
Пытон
Гость
« Ответ #19 : Января 14, 2012, 21:56 »

Кстати, питон - интерпретируемый язык - никакие долгие компиляции мне не страшны [дразнится]  Подмигивающий
Записан
mutineer
Гость
« Ответ #20 : Января 14, 2012, 22:10 »

Да только вон тут (в Qt) какие заковырки. Которые завтра буду опробовать...

Ну, справедливости ради, это заковыки не в Qt, а в ООП
Записан
Bepec
Гость
« Ответ #21 : Января 14, 2012, 22:19 »

Пытон, будет у тебя проект строчек эдак на 250,000 тогда поймёшь что такое долгая компиляция Веселый
Записан
Пытон
Гость
« Ответ #22 : Января 14, 2012, 22:44 »

Пытон, будет у тебя проект строчек эдак на 250,000 тогда поймёшь что такое долгая компиляция Веселый

Ты в курсе что такое "интерпретируемый язык"? Он не компилируется, он интерпретируется.
Записан
Bepec
Гость
« Ответ #23 : Января 14, 2012, 23:07 »

покомандное выполнение программы интерпретатором без предварительной компиляции, «на лету»; обычно такой процесс медленнее работы предварительно скомпилированного кода, но для небольших программ, не требуя затрат времени на компиляцию, может повышать общую производительность.

В принципе основу я знал Улыбающийся Теперь просветился точнее... к сожалению в проекте на 250000 строк быстродействие... как бы желательно.
Записан
andrew.k
Гость
« Ответ #24 : Января 15, 2012, 00:41 »

Я не дочитал эту демагогию до конца, но по-моему то что ты хочешь получить даст тебе использование eventFilter.
Добавь для нужного виджета (QListWidget) eventFilter
И тогда не нужно будет ничего промоутить и красивее будет.
Записан
mutineer
Гость
« Ответ #25 : Января 15, 2012, 01:02 »

Разве можно поставить фильтр на уже готовый виджет? вроде он в наследнике аппликейшена пишется
Записан
andrew.k
Гость
« Ответ #26 : Января 15, 2012, 01:11 »

Разве можно поставить фильтр на уже готовый виджет? вроде он в наследнике аппликейшена пишется
можно.
фильтр можно поставить на любой виджет, на который у тебя есть указатель.
Открой ассистент.
Код
C++ (Qt)
void QObject::installEventFilter ( QObject * filterObj )
Записан
mutineer
Гость
« Ответ #27 : Января 15, 2012, 01:14 »

блин, не нашел, потому что искал у QWidget. не думал что оно аж из объекта тянется
Записан
Пытон
Гость
« Ответ #28 : Января 15, 2012, 11:43 »

Код
Python
from PyQt4 import QtGui, QtCore, uic
import sys
 
# создаём класс-фильтр для обработчиков событий
class LEFilter(QtCore.QObject):
   def __init__(self, id, parent = None):
       QtCore.QObject.__init__(self, parent)
       self.id = id
   def eventFilter(self, obj, e):
       if e.type() == QtCore.QEvent.KeyPress:
           if e.text() != "1": form1.label.setText(form1.label.text() + e.text())
           else: form1.label.setText("")
       return QtCore.QObject.eventFilter(self, obj, e)
 
if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   form1 = uic.loadUi("ui_forms\QtDesigner_and_eventFilter.ui")
   # назначаем (инсталлируем) фильтр событий для виджета из формы QDesigner
   form1.lineEdit.installEventFilter(LEFilter(1, form1.lineEdit))
   form1.show()
   sys.exit(app.exec_())
 

Вот так выглядит такая кака как eventFilter в питоне.
Высмотрел пример в одном листинге, но он был без пояснений.
Подскажите, что за id принимает класс-фильтр? В том листинге строка с installEventFilter была продублирована дважды, отличаясь только номерами id (1 и 2 соответственно). Это зачем?
А также: кому и чего возвращает return?
Записан
mutineer
Гость
« Ответ #29 : Января 15, 2012, 13:01 »

Цитировать
The eventFilter() function must return true if the event should be filtered, (i.e. stopped); otherwise it must return false.
То есть возвращается результат фильтрования (надо ли продолжать обработку события). В данном случае возвращается результат фильтр по умолчанию.

Что за id хз, видимо что-то специфическое для примера
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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