• 2909阅读
  • 0回复

Qt 高级编程 1.1 扩展现有控件 [复制链接]

上一主题 下一主题
离线liqi98136
 

只看楼主 倒序阅读 楼主  发表于: 2017-04-01
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 -*-
  2. from PyQt5.QtWidgets import  QSpinBox, QApplication
  3. from PyQt5.QtCore import pyqtSlot, QRegExp
  4. from PyQt5.QtGui import QRegExpValidator
  5. class HexSpinBox(QSpinBox):
  6.     """docstring for HexSpinBox"""
  7.     def __init__(self, parent=None):
  8.         super(HexSpinBox, self).__init__(parent)
  9.         self.setRange(0, 255)
  10.         self._validator = QRegExpValidator(QRegExp("[0-9A-Fa-f]+"), self)
  11.     def validate(self,text,pos):
  12.         return self._validator.validate(text,pos)
  13.     def textFromValue(self, value):
  14.         if value in range(0,16):
  15.             return "0"+hex(value)[2:].upper()
  16.         else:
  17.             return hex(value)[2:].upper()
  18.     def valueFromText(self,text):
  19.         num = int(text, 16)
  20.         return num
  21. @pyqtSlot(str)
  22.     def setText(self,text):
  23.         self.setValue(self.valueFromText(text))
  24. if __name__ == '__main__':
  25.     import sys
  26.     app = QApplication(sys.argv)
  27.     ex = HexSpinBox()
  28.     ex.sizeHint()
  29.     ex.setText('0A')
  30.     ex.show()
  31.     sys.exit(app.exec_())





快速回复
限100 字节
 
上一个 下一个