s
spyAndrey7 июня 2022 г. 2:01

Событие wheelEvent для виджета QLineEdit

QLineEdit, wheelEvent

Нашёл вот такой пример:

!/usr/bin/python3

from PyQt5.QtGui import
from PyQt5.QtCore import

from PyQt5.QtWidgets import
import sys
class LineEdit(QLineEdit):
KEY = Qt.Key_Shift
def init (self,
args, kwargs):
QLineEdit. init (self, *args,
kwargs)
self.isKeyPressed = False
def keyPressEvent(self, event):
if event.key() == LineEdit.KEY:
self.isKeyPressed = True
QLineEdit.keyPressEvent(self, event)
def keyReleaseEvent(self, event):
if event.key() == LineEdit.KEY:
self.isKeyPressed = False
QLineEdit.keyReleaseEvent(self, event)

def wheelEvent(self, event):
    #if self.isKeyPressed:
    delta = 1 if event.angleDelta().y() > 0 else -1
    fn = self.font()
    fn.setPointSize(fn.pointSize() +  delta)
    self.setFont(fn)
    event.accept()

class SurfViewer(QMainWindow):
def init (self, parent=None):
super(SurfViewer, self). init ()
self.parent = parent
self.centralTabs= QTabWidget()
self.setCentralWidget(self.centralTabs)
self.setFixedWidth(200)
self.setFixedHeight(200)
#tab Model selection
self.tab_ModelSelect = QWidget()
self.centralTabs.addTab(self.tab_ModelSelect,"Label")
self.groupscrolllayouttest = QHBoxLayout() ####
self.groupscrollbartest = QGroupBox() ####
self.mainHBOX_param_scene = QVBoxLayout()
for i in range(2):
le = LineEdit(str(i))
le.setFixedWidth(200)
self.mainHBOX_param_scene.addWidget(le)
self.installEventFilter(self)
scroll = QScrollArea()
widget = QWidget(self)
widget.setLayout(QVBoxLayout())
widget.layout().addWidget(self.groupscrollbartest)
scroll.setWidget(widget)
scroll.setWidgetResizable(True)
self.groupscrollbartest.setLayout(self.mainHBOX_param_scene)
self.groupscrolllayouttest.addWidget(scroll)
self.tab_ModelSelect.setLayout(self.groupscrolllayouttest)
def main():
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.setWindowTitle('window')
# ex.showMaximized()
ex.show()
sys.exit(app.exec_( ))
if name == ' main ':
main()

Здесь (что очевидно) наследованный виджет обладает обработкой события wheelEvent, да, но у меня вопрос, на который не нашёл ответа, а сам как то не могу догнать:
сейчас я создаю интерфейс в Qt5 Designer, конвертирую и импортирую соотвественно... каким образом событие wheelEvent прикрутить к такому импортированному виджету?
Подскажи пожалуйста.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 7 июня 2022 г. 3:04

Если вы делаете интерфес с QLineEdit внутри, и вам нужен собственный CustomLineEdit, то наверное проще всего будет вручную в конвертированном файле щаменить QLineEdit на кастомный CustomLineEdit, поскольку Qt Designer работает с C++ Классами и там есть конечно функционал Promote To, когда в него добавляются кастомные виджеты, но нужно указывать заголовочный файл кастомного виджета, а это значит, что нужно написать C++ виджета, а это не ваш случай.
Так что лично мне ничего в голову кроме как ручной модификации конвертированного файла в голову не приходит.

    s
    • 7 июня 2022 г. 12:45

    вот что получилось:
    gui.py

    from PyQt5 import QtCore, QtGui, QtWidgets

    class LineEdit(QtWidgets.QLineEdit):
    def wheelEvent(self, event):
    #print("_")
    delta = 1 if event.angleDelta().y() > 0 else -1
    fn = int(self.text())
    fn = fn + delta
    self.setText(str(fn))
    event.accept()

    class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(800, 101)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
    self.horizontalLayout_2.setObjectName("horizontalLayout_2")
    self.horizontalLayout = QtWidgets.QHBoxLayout()
    self.horizontalLayout.setObjectName("horizontalLayout")
    self.label = QtWidgets.QLabel(self.centralwidget)
    self.label.setObjectName("label")
    self.horizontalLayout.addWidget(self.label)
    self.lineEdit = LineEdit(self.centralwidget)
    self.lineEdit.setObjectName("lineEdit")
    self.horizontalLayout.addWidget(self.lineEdit)
    self.horizontalLayout_2.addLayout(self.horizontalLayout)
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Число"))
    

    и main.py:

    from math import *
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    import gui

    class ExampleApp(QtWidgets.QMainWindow, gui.Ui_MainWindow):

    def __init__(self):
        super().__init__()
        self.setupUi(self)  
        self.lineEdit.setValidator(QtGui.QIntValidator(0, 30)) #wheelEvent.connect(self.evnt) # генерить панель
    

    def main():
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    app.exec_()

    if name == ' main ':
    main()

    Интересно что подключенный валидатор, не контролирует число в строке ввода, и мышью можно "накрутить" число ниже и выше пределов :)

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь
      d
      • dsfs
      • 26 апреля 2024 г. 15:56

      C++ - Тест 004. Указатели, Массивы и Циклы

      • Результат:80баллов,
      • Очки рейтинга4
      d
      • dsfs
      • 26 апреля 2024 г. 15:45

      C++ - Тест 002. Константы

      • Результат:50баллов,
      • Очки рейтинга-4
      d
      • dsfs
      • 26 апреля 2024 г. 15:35

      C++ - Тест 001. Первая программа и типы данных

      • Результат:73баллов,
      • Очки рейтинга1
      Последние комментарии
      k
      kmssr9 февраля 2024 г. 6:43
      Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
      АК
      Анатолий Кононенко5 февраля 2024 г. 13:50
      Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
      EVA
      EVA25 декабря 2023 г. 22:30
      Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
      J
      JonnyJo25 декабря 2023 г. 20:38
      Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
      G
      Gvozdik19 декабря 2023 г. 9:01
      Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
      Сейчас обсуждают на форуме
      BlinCT
      BlinCT5 мая 2024 г. 16:46
      Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
      BlinCT
      BlinCT5 мая 2024 г. 16:44
      добавить qlineseries в функции Давно я не работал с виджетами и с формами, на мой взгляд уже пережитов, и в управлении не очень удобное это все. Н оя у вас не увидел в коде где вы QCharts растягиваете на область парента.…
      PS
      Peter Son4 мая 2024 г. 4:57
      Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
      Evgenii Legotckoi
      Evgenii Legotckoi3 мая 2024 г. 1:07
      Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
      IscanderChe
      IscanderChe30 апреля 2024 г. 15:22
      Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

      Следите за нами в социальных сетях