亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2046 | 回復: 0
打印 上一主題 下一主題

PyQt4實現(xiàn)封裝的QT的ip地址控件 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-22 08:53 |只看該作者 |倒序瀏覽

由于QT沒有提供現(xiàn)成的IP地址控件,而僅僅使用正則表達式和inputMask為QLineEdit進行IP地址輸入限制和驗證,效果不怎么理想。所以用PyQt4封裝了一個IPv4地址控件。

from PyQt4.QtGui import *
from PyQt4.QtCore import *


class IpPartEdit(QLineEdit):
    def __init__(self, parent = None):
        QLineEdit.__init__(self, parent)


        self.nextTab = None
        self.setMaxLength(3)
        self.setFrame(False)
        self.setAlignment(Qt.AlignCenter)

        validator = QIntValidator(0, 255, self)
        self.setValidator(validator)

        self.connect(self, SIGNAL('textEdited(QString)'),\
                     self, SLOT('text_edited(QString)'))

    def set_nextTabEdit(self, nextTab):
        self.nextTab = nextTab

    def focusInEvent(self, event):
        self.selectAll()
        super(IpPartEdit, self).focusInEvent(event)

    def keyPressEvent(self, event):
        if (event.key() == Qt.Key_Period):
            if self.nextTab:
                self.nextTab.setFocus()
                self.nextTab.selectAll()
        super(IpPartEdit, self).keyPressEvent(event)

    @pyqtSlot('QString')
    def text_edited(self, text):
        validator = QIntValidator(0, 255, self)
        ipaddr = text
        pos = 0
        
        state = validator.validate(ipaddr, pos)[0]
        if state == QValidator.Acceptable:
            if ipaddr.size() > 1:
                if ipaddr.size() == 2:
                    ipnum = ipaddr.toInt()[0]
                    if ipnum > 25:
                        if self.nextTab:
                            self.nextTab.setFocus()
                            self.nextTab.selectAll()
                else:
                    if self.nextTab:
                        self.nextTab.setFocus()
                        self.nextTab.selectAll()

class Ip4Edit(QLineEdit):
    def __init__(self, parent = None):
        QLineEdit.__init__(self, parent)

        self.ip_part1 = IpPartEdit()
        self.ip_part2 = IpPartEdit()
        self.ip_part3 = IpPartEdit()
        self.ip_part4 = IpPartEdit()
        self.ip_part1.setAlignment(Qt.AlignCenter)
        self.ip_part2.setAlignment(Qt.AlignCenter)
        self.ip_part3.setAlignment(Qt.AlignCenter)
        self.ip_part4.setAlignment(Qt.AlignCenter)

        self.labeldot1 = QLabel('.')
        self.labeldot2 = QLabel('.')
        self.labeldot3 = QLabel('.')
        self.labeldot1.setAlignment(Qt.AlignCenter)
        self.labeldot2.setAlignment(Qt.AlignCenter)
        self.labeldot3.setAlignment(Qt.AlignCenter)

        layout = QHBoxLayout()        
        layout.addWidget(self.ip_part1)
        layout.addWidget(self.labeldot1)
        layout.addWidget(self.ip_part2)
        layout.addWidget(self.labeldot2)
        layout.addWidget(self.ip_part3)
        layout.addWidget(self.labeldot3)
        layout.addWidget(self.ip_part4)
        layout.setSpacing(0)
        layout.setContentsMargins(QMargins(2, 2, 2, 2))
        
        self.setLayout(layout)

        QWidget.setTabOrder(self.ip_part1, self.ip_part2)
        QWidget.setTabOrder(self.ip_part2, self.ip_part3)
        QWidget.setTabOrder(self.ip_part3, self.ip_part4)
        self.ip_part1.set_nextTabEdit(self.ip_part2)
        self.ip_part2.set_nextTabEdit(self.ip_part3)
        self.ip_part3.set_nextTabEdit(self.ip_part4)

        self.connect(self.ip_part1, SIGNAL('textChanged(QString)'),\
                     self, SLOT('textChangedSlot(QString)'))
        self.connect(self.ip_part2, SIGNAL('textChanged(QString)'),\
                     self, SLOT('textChangedSlot(QString)'))
        self.connect(self.ip_part3, SIGNAL('textChanged(QString)'),\
                     self, SLOT('textChangedSlot(QString)'))
        self.connect(self.ip_part4, SIGNAL('textChanged(QString)'),\
                     self, SLOT('textChangedSlot(QString)'))

        self.connect(self.ip_part1, SIGNAL('textEdited(QString)'),\
                     self, SLOT('textEditedSlot(QString)'))
        self.connect(self.ip_part2, SIGNAL('textEdited(QString)'),\
                     self, SLOT('textEditedSlot(QString)'))
        self.connect(self.ip_part3, SIGNAL('textEdited(QString)'),\
                     self, SLOT('textEditedSlot(QString)'))
        self.connect(self.ip_part4, SIGNAL('textEdited(QString)'),\
                     self, SLOT('textEditedSlot(QString)'))

    @pyqtSlot('QString')
    def textChangedSlot(self, text):
        ippart1 = self.ip_part1.text()
        ippart2 = self.ip_part2.text()
        ippart3 = self.ip_part3.text()
        ippart4 = self.ip_part4.text()

        ipaddr = QString('%1.%2.%3.%4')\
                 .arg(ippart1)\
                 .arg(ippart2)\
                 .arg(ippart3)\
                 .arg(ippart4)
        self.emit(SIGNAL('textChanged'), ipaddr)

    @pyqtSlot('QString')
    def textEditedSlot(self, text):
        ippart1 = self.ip_part1.text()
        ippart2 = self.ip_part2.text()
        ippart3 = self.ip_part3.text()
        ippart4 = self.ip_part4.text()

        ipaddr = QString('%1.%2.%3.%4')\
                 .arg(ippart1)\
                 .arg(ippart2)\
                 .arg(ippart3)\
                 .arg(ippart4)
        self.emit(SIGNAL('textEdited'), ipaddr)

    def setText(self, text):
        regexp = QRegExp('^((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d||25[0-5]|[01]?\d\d?)$')
        validator = QRegExpValidator(regexp ,self)
        nPos = 0
        state = validator.validate(text, nPos)[0]

        ippart1 = QString()
        ippart2 = QString()
        ippart3 = QString()
        ippart4 = QString()

        if state == QValidator.Acceptable:  # valid
            ippartlist = text.split('.')

            strcount = len(ippartlist)
            index = 0
            if index < strcount:
                ippart1 = ippartlist[index]
            index += 1
            if index < strcount:
                ippart2 = ippartlist[index]
                index += 1
            if index < strcount:
                ippart3 = ippartlist[index]
                index += 1
            if index < strcount:
                ippart4 = ippartlist[index]

        self.ip_part1.setText(ippart1)
        self.ip_part2.setText(ippart2)
        self.ip_part3.setText(ippart3)
        self.ip_part4.setText(ippart4)

    def text(self):
        ippart1 = self.ip_part1.text()
        ippart2 = self.ip_part2.text()
        ippart3 = self.ip_part3.text()
        ippart4 = self.ip_part4.text()

        return QString('%1.%2.%3.%4')\
                 .arg(ippart1)\
                 .arg(ippart2)\
                 .arg(ippart3)\
                 .arg(ippart4)

    def setStyleSheet(self, styleSheet):
        self.ip_part1.setStyleSheet(styleSheet)
        self.ip_part2.setStyleSheet(styleSheet)
        self.ip_part3.setStyleSheet(styleSheet)
        self.ip_part4.setStyleSheet(styleSheet)

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP