QSpinbox检查是否按下了向上或向下按钮

2024-05-19 05:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种简单的方法来检查QT spinbox的向上或向下按钮是否被按下?我在QT论坛上看到过这一点,但不知道如何解构它,或者对我来说太复杂了,我正在用PyQT5编写代码

void MySpinBox::mousePressEvent(QMouseEvent* event)

QSpinBox::mousePressEvent(event);

QStyleOptionSpinBox opt;
this->initStyleOption(&opt);

if( this->style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxUp).contains(event->pos()) )
    // UP BUTTON PRESSED
else if( this->style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxDown).contains(event->pos()) )
    //DOWN BUTTON PRESSED

另外,我有两个变量,其中包含spinbox值

version_spinValue = self.ui.version_sbox.value()
work_spinValue = self.ui.work_sbox.value()

我想做的就是当版本值spinbox up按钮按下时,work spinbox值重置为1,当它下降时,它什么也不做(或者只打印按下down按钮的简单文本)


Tags: eventifstylethisqt按钮workcc
1条回答
网友
1楼 · 发布于 2024-05-19 05:53:33

必须使用hitTestComplexControl()方法才能知道单击了哪个元素:

from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QSpinBox, QStyle, QStyleOptionSpinBox


class SpinBox(QSpinBox):
    upClicked = pyqtSignal()
    downClicked = pyqtSignal()

    def mousePressEvent(self, event):
        super().mousePressEvent(event)

        opt = QStyleOptionSpinBox()
        self.initStyleOption(opt)

        control = self.style().hitTestComplexControl(
            QStyle.CC_SpinBox, opt, event.pos(), self
        )
        if control == QStyle.SC_SpinBoxUp:
            self.upClicked.emit()
        elif control == QStyle.SC_SpinBoxDown:
            self.downClicked.emit()


def main():
    import sys

    app = QApplication(sys.argv)

    w = SpinBox()
    w.upClicked.connect(lambda: print("up"))
    w.downClicked.connect(lambda: print("down"))
    w.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

相关问题 更多 >

    热门问题