查看完整版本: [-- Qt 高级编程 1.1 扩展现有控件 --]

QTCN开发网 -> Python Qt GUI快速编程 -> Qt 高级编程 1.1 扩展现有控件 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liqi98136 2017-04-01 16:04

Qt 高级编程 1.1 扩展现有控件

HexSpinBox from  SpinBox

16进制
字符从0-9 ,A-F, a-f
范围从0-255

通过查找QT助手,找到SpinBox
实现,主要完成三个虚函数

virtual QValidator::State validate(QString &text, int &pos) const
virtual QString textFromValue(int value) const
virtual int  valueFromText(const QString &text) const

对应三个函数
def validate(self,text,pos):   #输入验证
def textFromValue(self, value): #数字变字符 python 使用hex(value)
def valueFromText(self,text): #字符串变成数字 int( text,16)
具体实现如下:
  1. # -*- coding:utf-8 -*-

    from PyQt5.QtWidgets import  QSpinBox, QApplication
    from PyQt5.QtCore import pyqtSlot, QRegExp
    from PyQt5.QtGui import QRegExpValidator

    class HexSpinBox(QSpinBox):
        """docstring for HexSpinBox"""
        def __init__(self, parent=None):
            super(HexSpinBox, self).__init__(parent)

            self.setRange(0, 255)
            self._validator = QRegExpValidator(QRegExp("[0-9A-Fa-f]+"), self)

        def validate(self,text,pos):
            return self._validator.validate(text,pos)

        def textFromValue(self, value):
            if value in range(0,16):
                return "0"+hex(value)[2:].upper()
            else:
                return hex(value)[2:].upper()

        def valueFromText(self,text):
            num = int(text, 16)
            return num


    @pyqtSlot(str)
        def setText(self,text):
            self.setValue(self.valueFromText(text))


    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)

        ex = HexSpinBox()
        ex.sizeHint()
        ex.setText('0A')
        ex.show()

        sys.exit(app.exec_())







查看完整版本: [-- Qt 高级编程 1.1 扩展现有控件 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled