• QTablewidget通过代理实现限制输入


    QTablewidget代理

    之前做过一个QTablewidget想要限制某些单元格只能输入IP,刚开始采用在单元格中添加QLineEdit控件的方法,效果差强人意。后来发现通过QItemDelegate可以很方便实现需求。

    QItemDelegate 

     1 #pragma once
     2 #include <QWidget>
     3 #include <QItemDelegate>  
     4 #include <QLineEdit>
     5 class CIPItem : public 
    6
    { 7 Q_OBJECT 8 public: 9 CIPItem(QObject *parent = 0); 10 ~CIPItem(void); 11 public: 12 QWidget *createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const; 13 void setEditorData ( QWidget * editor, const QModelIndex & index ) const ; 14 void setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const ; 15 };
     1 #include "IPItem.h"
     2 
     3 CIPItem::CIPItem(QObject *parent):QItemDelegate(parent)
     4 {
     5     
     6 }
     7 
     8 CIPItem::~CIPItem(void)
     9 {
    10 }
    11 QWidget *CIPItem::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
    12 {
    13     //添加代理控件
    14     QLineEdit *editor =  new  QLineEdit(parent); 
    15     QRegExp regExp("\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");  //IP的正则表达式 
    16     editor->setValidator( new QRegExpValidator(regExp, parent));  
    17     return  editor;  
    18 }
    19 
    20 void CIPItem::setEditorData(QWidget *editor, const QModelIndex &index) const
    21 {
    22     //将单元格中的文本写入代理控件
    23     QString text = index.model()->data(index, Qt::EditRole).toString();  
    24     QLineEdit *lineEdit =  static_cast <QLineEdit*>(editor);  
    25     lineEdit->setText(text); 
    26 }
    27 
    28 void CIPItem::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const 
    29 {
    30     //将代理控件的文本写入单元格
    31     QLineEdit *lineEdit =  static_cast <QLineEdit*>(editor);  
    32     QString text = lineEdit->text();  
    33     model->setData(index, text, Qt::EditRole); 
    34 }

    在QTablewidget中调用setItemDelegate、setItemDelegateForColumn、setItemDelegateForRow即可。

  • 相关阅读:
    修改linux的hostname (修改linux系统的IP和hostname)
    linux自动ftp上传与下载文件的简单脚本
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
    用SQL命令查看Mysql数据库大小
    linux screen 命令详解
    mysql常用命令
    Linux 设置mysql开机启动
    源码编译mysql 5.5+ 安装过程全记录
    nagios-plugins安装报错--with-mysql: no
    Spark 中在处理大批量数据排序问题时,如何避免OOM
  • 原文地址:https://www.cnblogs.com/liuxianglei/p/9668860.html
Copyright © 2020-2023  润新知