首页 > 其他分享 >QTableWidget指定某行某列只能输入数字

QTableWidget指定某行某列只能输入数字

时间:2024-01-24 16:47:55浏览次数:23  
标签:24 const 某列 禅元 QTableWidget NonNegativeNumberItemDelegate editor 126 某行

主要通过给QTableWidget设置代理,即继承QItemDelegate类重写其中的方法实现,具体代码如下:

 1 /**
 2  * @file NonNegativeNumberItemDelegate.h
 3  * @brief 非负整数校验代理
 4  * @author 禅元天道 ([email protected])
 5  * @date 2024-01-24
 6  */
 7 #ifndef NONNEGATIVENUMBERITEMDELEGATE_H
 8 #define NONNEGATIVENUMBERITEMDELEGATE_H
 9 
10 #include <QItemDelegate>
11 
12 /**
13 * @brief 非负整数校验代理类
14 * @author 禅元天道 ([email protected])
15 * @date 2024-01-24
16 */
17 class NonNegativeNumberItemDelegate : public QItemDelegate
18 {
19 public:
20     NonNegativeNumberItemDelegate(QObject* parent = nullptr);
21     /**
22     * @brief 创建编辑器.
23     * @author 禅元天道 ([email protected])
24     * @date 2024-01-24
25     */
26     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
27     /**
28     * @brief 设置编辑器的值.
29     * @author 禅元天道 ([email protected])
30     * @date 2024-01-24
31     */
32     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
33     /**
34     * @brief 设置控件对应单元格的值.
35     * @author 禅元天道 ([email protected])
36     * @date 2024-01-24
37     */
38     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
39     /**
40     * @brief 设置控件的属性.
41     * @author 禅元天道 ([email protected])
42     * @date 2024-01-24
43     */
44     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
45 };
46 
47 #endif // NONNEGATIVENUMBERITEMDELEGATE_H

 

 

 1 /**
 2  * @file NonNegativeNumberItemDelegate.cpp
 3  * @brief 非负整数校验代理
 4  * @author 禅元天道 ([email protected])
 5  * @date 2024-01-24
 6  */
 7 #include "NonNegativeNumberItemDelegate.h"
 8 #include <QLineEdit>
 9 #include <QIntValidator> 
10 #include <QModelIndex>
11 #include <QAbstractItemModel>
12 
13 
14 NonNegativeNumberItemDelegate::NonNegativeNumberItemDelegate(QObject* parent) : QItemDelegate(parent)
15 {
16 
17 }
18 /**
19 * @brief 创建编辑器.
20 * @author 禅元天道 ([email protected])
21 * @date 2024-01-24
22 */
23 QWidget *NonNegativeNumberItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
24 {
25     QLineEdit* editor = new QLineEdit(parent);
26     editor->setStyleSheet("border:0px;");
27     QIntValidator* intValidator = new QIntValidator(editor);
28     intValidator->setBottom(0);
29     editor->setValidator(intValidator);
30     return editor;
31 }
32 /**
33 * @brief 设置编辑器的值.
34 * @author 禅元天道 ([email protected])
35 * @date 2024-01-24
36 */
37 void NonNegativeNumberItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
38 {
39     QLineEdit* lineEdit = qobject_cast<QLineEdit*>(editor);
40     QString value = index.model()->data(index).toString();
41     lineEdit->setText(value);
42 }
43 /**
44 * @brief 设置控件对应单元格的值.
45 * @author 禅元天道 ([email protected])
46 * @date 2024-01-24
47 */
48 void NonNegativeNumberItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
49 {
50     QLineEdit* lineEdit = qobject_cast<QLineEdit*>(editor);
51     QString text = lineEdit->text().trimmed();
52     while (text.startsWith("0") && text != "0") 
53     {
54         text = text.mid(1);
55     }
56     model->setData(index, text);
57 }
58 /**
59 * @brief 设置控件的属性.
60 * @author 禅元天道 ([email protected])
61 * @date 2024-01-24
62 */
63 void NonNegativeNumberItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
64 {
65     editor->setGeometry(option.rect);
66 }

 

使用方法:

1 NonNegativeNumberItemDelegate* itemDelegate = new NonNegativeNumberItemDelegate;
2 _ui->tableWidget->setItemDelegateForColumn(1, itemDelegate);
3 _ui->tableWidget->setItemDelegateForRow(1, itemDelegate);

 

标签:24,const,某列,禅元,QTableWidget,NonNegativeNumberItemDelegate,editor,126,某行
From: https://www.cnblogs.com/chanyuantiandao/p/17985000

相关文章

  • Excel只替换某列的数据
    使用Excel时会遇到这种情况,可以选中某列,然后可以按Ctrl+F只查找这一列的内容,但是按Ctrl+H替换时确无法直接替换这一列的内容。下面介绍下如何操作能替换某些范围的内容示例介绍:工作簿表格中存在多个数字1,如果我想把所有1替换成其他内容可以用查找/替换简单的完成,但是现在......
  • vue element 表格定位到某行
    /***@description:通过表格索引定位表格的位置*@param{refName}table的ref值*@param{index}table的索引值*@return:*@author:hch*/$tableScrollMove(refName,index=0){if(!refName||!this.$refs[refName])r......
  • Python批量求取Excel表格每一个4行内某列的最大值、最小值
      本文介绍基于Python语言,基于Excel表格文件内某一列的数据,计算这一列数据在每一个指定数量的行的范围内(例如每一个4行的范围内)的区间最大值的方法。  已知我们现有一个.csv格式的Excel表格文件,其中有一列数据,我们希望对其加以区间最大值的计算——即从这一列的数据部分(也就是......
  • GridView根据某行的内容显示或隐藏Edit按钮
     ProtectedSubgdv_RowDataBound(ByValsenderAsObject,ByValeAsGridViewRowEventArgs)Handlesgdv.RowDataBoundIfe.Row.RowType=DataControlRowType.DataRowThenIfCType(e.Row.FindControl("lblVerifiedBy"),Label).T......
  • 工作常用的EXCEL公式 | 某列相同的数据进行汇总
    需求:解决方法:1、对部门排序,再进行分类汇总(数据-分类汇总) 2、选中A列,CTRL+G,快速定位空值,然后点击合并单元格3、选中A列,然后点击格式刷,刷在B列 4、取消分类汇总 5、删除A列,然后筛选B列为0的数据,然后删除,即可。 (调整一下格式即可) ......
  • MySQL中对某列进行求和
    MySQL中对某列进行求和要在MySQL中对某列进行求和,你可以使用SUM聚合函数。以下是一个简单的示例,演示如何对某列进行求和:假设你有一个名为your_table的表,其中有一个列名为your_column,你想对这一列进行求和:SELECTSUM(your_column)ASsum_resultFROMyour_table;这将返回......
  • 模型视图简介、QListWidget、QTreeWidget、QTableWidget、QStringListModel、QFileSys
    一、模型视图简介   有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的Qt要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改的地方写回,然后......
  • pyqt5-QTableWidgetItem表格单元格组件
    1、介绍QTableWidgetItem,表格单元格组件。QTableWidgetItem(type:int=QTableWidgetItem.ItemType.Type)QTableWidgetItem(text:str,type:int=QTableWidgetItem.ItemType.Type)QTableWidgetItem(icon:QIcon,text:str,type:int=QTableWidgetItem.ItemType.Type)......
  • pyqt5-QTableWidget表格组件
    1、介绍QTableWidget,表格组件。2、行和列setColumnCount(self,columns:int)设置表格的列数,默认是0如果列数为0,则不会显示行,即使行数不为0columnCount(self)->int返回表格的列数setRowCount(self,rows:int)设置表格的行数rowCount(self)->int返回表格的......
  • python去除某列固定数字对应的整行方法
     想去除month列里的1,2,3,4,10,11,12月对应的行留下5,6,7,8,9月#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Su@file:deletestaion.py@time:2023/09/22@desc:"""importpandasaspddf=pd.read_excel('/lianxi/SPI.xlsx�......