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) 具体实现如下:
- # -*- 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_())
|
|