首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在关闭表单时QtableView单元格失去焦点时保存正在编辑的数据

在关闭表单时,如果QTableView单元格失去焦点,可以通过以下步骤保存正在编辑的数据:

  1. 检测当前是否有单元格处于编辑状态。可以通过QTableView的currentIndex()方法获取当前选中的单元格索引,然后使用QTableView::isPersistentEditorOpen()方法检查该单元格是否处于编辑状态。
  2. 如果有单元格处于编辑状态,需要先将其提交或取消编辑。可以使用QAbstractItemView::closeEditor()方法来关闭当前正在编辑的单元格编辑器,并将编辑结果保存或取消。
  3. 保存正在编辑的数据。可以通过获取QTableView的数据模型(QAbstractItemModel),然后使用模型的相关方法(如QAbstractItemModel::setData())将编辑后的数据保存到模型中。

以下是一个示例代码,演示如何在关闭表单时保存正在编辑的数据:

代码语言:txt
复制
# 导入必要的模块
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtCore import Qt, QAbstractTableModel, QModelIndex

class MyTableModel(QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self.data = data

    def rowCount(self, parent=QModelIndex()):
        return len(self.data)

    def columnCount(self, parent=QModelIndex()):
        return len(self.data[0])

    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.DisplayRole:
            return self.data[index.row()][index.column()]

    def setData(self, index, value, role=Qt.EditRole):
        if role == Qt.EditRole:
            self.data[index.row()][index.column()] = value
            return True
        return False

    def flags(self, index):
        return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建数据
        self.data = [['A1', 'B1', 'C1'],
                     ['A2', 'B2', 'C2'],
                     ['A3', 'B3', 'C3']]

        # 创建表格视图和模型
        self.table_view = QTableView()
        self.model = MyTableModel(self.data)
        self.table_view.setModel(self.model)

        # 创建保存按钮
        self.save_button = QPushButton('保存')
        self.save_button.clicked.connect(self.saveData)

        # 创建布局并将表格视图和按钮添加到布局中
        layout = QVBoxLayout()
        layout.addWidget(self.table_view)
        layout.addWidget(self.save_button)

        # 创建主窗口部件并设置布局
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def saveData(self):
        # 检查是否有单元格处于编辑状态
        if self.table_view.currentIndex().isValid() and self.table_view.isPersistentEditorOpen():
            # 关闭当前正在编辑的单元格编辑器
            self.table_view.closeEditor(self.table_view.currentIndex(), QAbstractItemView.NoEditTriggers)

        # 保存正在编辑的数据
        self.model.submitAll()

if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

在上述示例中,我们创建了一个自定义的数据模型MyTableModel,继承自QAbstractTableModel,用于管理表格数据。然后,我们创建了一个主窗口MyWindow,其中包含一个QTableView作为表格视图,以及一个保存按钮。通过点击保存按钮,我们可以保存正在编辑的数据。

请注意,上述示例中没有提及任何特定的云计算品牌商或产品。如果您需要在云计算环境中使用QTableView和相关技术,您可以根据您选择的云计算平台的特定要求和支持,选择适当的解决方案和产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spread for Windows Forms快速入门(7)---单元格的交互操作

单元格的编辑模式 通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容。在一个单元格中编辑的能力被称为编辑模式。一些属性和方法可以用来自定义编辑模式的使用。...当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示。当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示。...image.png 一个单元格将进入编辑模式(开启编辑模式),当: 用户在单元格中输入内容 用户双击单元格 EditMode属性设置为true 一个单元格离开编辑模式(关闭编辑模式),当 用户按下回车键...用户激活了另外一个单元格 应用程序丢失焦点 EditMode属性设置为false 当一个单元格进入编辑模式,默认情况下,光标位于单元格中文本的末端。...举例来说,你不能将数据区域的单元格与行标题的单元格合并,并且你不能将列标题的单元格与表角的单元格合并。这里主要介绍在数据区域如何合并单元格。 当你创建单元格的合并区域时。

1.4K100

QTableView基本用法讲解,Qt表格控件的使用方法

QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。...:   检索处方项目成功后,把该项目显示到QTableView里,把需要编辑的数量字段提供给用户输入,用户输入确认后,该项目留在列表中,然后开始下一项目检索录入。   ...=m_ui->tbList->model()->index(row,column); //获得需要编辑的单元格的位置 m_ui->tbList->setFocus(); //把输入焦点交给tbList...m_ui->tbList->setCurrentIndex(mdidx); //设定需要编辑的单元格 m_ui->tbList->edit(mdidx); //开始编辑 复制代码   有一个问题需要注意...向QTableView中添加记录时,字段一定要完整,不能有空白字段,否则结果无法保存。切记。

16.1K20
  • QTableView + QStandardItemModel模式显示表格冻结列(模板)

    点击上方"蓝字"关注我们01、QTableViewQTableView 是 Qt 框架中一个用于显示和编辑表格数据的控件。它提供了一个灵活的界面,允许用户通过行和列来浏览和修改数据。...QTableView 支持多种数据模型,如 QAbstractItemModel,并且可以与模型一起使用,以提供数据视图。此外,QTableView 还提供了排序、筛选和分组等功能,以满足不同的需求。...03、QStandardItemQStandardItem 是 Qt 框架中一个用于表示表格单元格的数据对象。...在 QTableView 中,QStandardItem 作为数据模型中的基本元素,负责展示和编辑表格中的数据。通过操作 QStandardItem,你可以实现对表格数据的增删改查等操作。...QModelIndex 不包含任何数据本身,它只是一个指向模型中某个节点的指针。因此,在使用 QModelIndex 时,需要确保它指向的是一个有效的节点。3.

    43710

    HTML属性及事件

    属性名 描述 accesskey 设置访问元素的键盘快捷键。 class 规定元素的类名(classname) contenteditableNew 规定是否可编辑元素的内容。...在文档加载之前运行脚本 onblur 当窗口失去焦点时运行脚本 onerror 当错误发生时运行脚本 onfocus 当窗口获得焦点时运行脚本 onhaschange 当文档改变时运行脚本 onload...存储空间中的数据发生变化时)运行脚本 onundo 当文档执行撤销时运行脚本 onunload 当用户离开文档时运行脚本 表单事件 属性 描述 onblur 当元素失去焦点时运行脚本 onchange...onplaying 当媒介数据已开始播放时运行脚本 onprogress 当浏览器正在取媒介数据时运行脚本 onratechange 当媒介数据的播放速率改变时运行脚本 onreadystatechange...ontoggle 当用户打开或关闭 元素时触发

    2.8K20

    QTableView 一列添加两个按钮

    在QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已。...主要是实现 了它的painter方法,把两个自定义的按钮绘制到视图并保存 还有editorEvent事件,用来处理点击事件,在点击时我们算一下鼠标的坐标在哪个按钮下, 再处理相应的点击事件 #ifndef...QString str) { QMessageBox msg; msg.setText(str); msg.exec(); } 好了自定义按钮处理完了 我们建一个Table添加一些数据...; Qt::ItemFlags flag = QAbstractItemModel::flags(index); // flag|=Qt::ItemIsEditable // 设置单元格可编辑...,此处注释,单元格无法被编辑 return flag; } void TableModel::setHorizontalHeader(const QStringList &headers) {

    3.6K90

    Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

    目录 1、QTableView类 2、QListView类 3、QListWidet类 4、QTableWidget类 5、QTreeWidget和QTreeWidgetltem类 ---- 表格与树解决的问题是如何在一个控件中有规律地呈现更多的数据...QListView是基于模型(Model)的,需要程序来建立模型,然后再保存数据。...QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元格数据是通过QTableWidgetltem 对象来实现的。...使用QTableWidget时就需要QTableWidgetltem,用来表示表格中的一个单元格,整个表格就是用各单元格构建起来的。...QTableWidget类中的常用方法如下表所示: 编辑规则的枚举值类型如下表所示: 表格的选择行为的枚举值类型如下表所示: 单元格文本的水平对齐方式如下表所示: 单元格文本的垂直对齐方式如下表所示

    4K30

    Spread for Windows Forms快速入门(15)---使用 Spread 设计器

    无论用户是正在做一个关于 Spread 控件特性的原型研究,还是对于一个已经存在的 Spread 控件在某些方面进行进一步的定制,Spread 设计器专有的图形界面可节省大量的时间和精力。...Spread 设计器允许用户将设计的结果保存为文件,并与他人共享。将设计保存为文件后,下一次可以打开进行进一步的修改,也可以打开其他团队成员的设计文件。...在设计器属性窗口中列出了当前选中对象的属性。用户可以使用对象列表选中指定的对象,也可以通过点击表单、单元格行、单元格列、单元格来选中指定的对象,接下来就可以在属性窗口中编辑选中对象的属性了。...在属性窗口中通过拖动滚动条,用户可以看到 Spread 表单的行数和列数都是500。 点击并编辑这两个属性,将其更改为10。 4. 在单元格行和列的头区域添加有意义的文字。...接下来,继续在属性窗口中改变单元格列的背景色为黄色,点击“应用”,然后点击“确认“关闭编辑窗口。再次右键点击当前单元格列的头区域,在编辑窗口中将列高更改为 75,点击“应用”。

    2.1K90

    前端JQuery标准教案

    讲解each()方法的使用 第二阶段:操纵Form表单数据:本章通过向Form表单添加JSON数据和从Form表单中获取JSON数据来展示JQuery的选择器作用和属性操作。...td.append(input);//添加子元素 input.trigger(“focus”).trigger(“select”);//让文本框获得焦点并选中,防止出现连续点击不同的单元格时...,不能触发失去焦点事件。...3)失去焦点后将文本框中的内容放入到表格中并删除文本框; 4)添加样式让文本框和表格的宽高一致(注意预先在样式中要先定义好td的宽和高),并去掉文本框的边框,让文本框和表格的边框看起来一致,就好像直接在单元格中编辑一样...5)如果连续点击不同的单元格则会出现连续两个或三个可编辑的单元格,解决这个问题需要确保新添加的文本框获得焦点 总结本示例学过的知识点: ( ) 选择器、 � � ( ) 事件绑定、 ()选择器、on()

    7110

    梳理下常见的不冒泡事件

    User shifts focus focusout 第一个目标元素失去焦点之前触发 focusin 第二个目标元素获得焦点之前触发 blur 第一个目标元素失去焦点之后触发 focus 第二个元素获得焦点之后触发...•blur 不冒泡 ❌•focus 不冒泡 ❌•focusin•focusout 要注意 blur 事件和 focus 事件都是不冒泡的,因获取和失去焦点本身就是针对这个元素的。...直接移动到元素C,常见于失去焦点再获得焦点的情况,事件触发顺序见下表: Event Type Element Notes mousemove 直接移动到元素C mouseover C mouseenter...该事件包括三个: •compositionstart 输入法编辑器打开状态,准备输入•compositionupdate 向输入字段插入新字符时触发•compositionend 输入法编辑器关闭时触发...不冒泡 ❌•等等 html5 的 online offline、notification、push 等事件也都是不冒泡的;针对特定资源的 Progress 事件如 abort、load、progress

    1.3K30

    Spread for Windows Forms高级主题(3)---单元格的编辑模式

    当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示。当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示。...image.png 一个单元格将进入编辑模式(开启编辑模式),当: 用户在单元格中输入内容 用户双击单元格 EditMode属性设置为true 一个单元格离开编辑模式(关闭编辑模式),当 用户按下回车键...当编辑控件得到焦点时,你可以使用SuperEditBase.EditModeCursorPosition属性设置光标在该控件中的位置。...你可以允许用户编辑单元格备注,如果备注始终显示。为了让用户对其进行编辑,设置表单中的AllowNoteEdit属性,这样的设置使得该表中的所有即时贴备注都是可以由用户编辑的。...对于终端用户来说,单元格备注可以用来保存一些额外信息。你还可以允许用户在单元格中附加他们自己的信息,该信息可以是任何对终端用户有用的信息。

    1.9K60

    用Qt写软件系列三:一个简单的系统工具之界面美化

    窗口内容布局       由上面的规划图可以看出,内容布局由三个部分组成上方(top layout)的行编辑框、两个按钮,中间及下面的两个QTableView。...一格格的被网格线分开反而觉得被束缚了。其他的就是一些常见的设置选项,不必多说。另外要注意的是,我们总可以看到即便去掉了网格线,当我们鼠标点击某一行时,Qt仍然会在鼠标下的单元格周围画上一个选线框。...QTableView的上下文菜单,则需要重写contextMenuEvent()实现。上下文的菜单项背景色仍然可以用QSS进行控制。另外,QTableView还有一个单元格对齐的问题。...为什么不是从QTableView继承呢?因为我们使用了Qt中的MVC框架。View只管绘制Model中的数据,至于数据内容、格式设置什么的,都在Model里面设置。...第二个参数是一个Role类型,用于区分不同的数据类型。因为Qt里面的数据分很多种: ?       我们得指明,当数据是用来显示在单元格中的时候,我们才设置对齐方式啊。不然的话就会乱套了。

    6.6K70

    C++ Qt开发:QItemDelegate自定义代理组件

    在Qt中,QStyledItemDelegate 类是用于创建自定义表格视图(如QTableView和QTableWidget)的委托类,允许你自定义表格中每个单元格的外观和交互。...此处我们将实现对QTableView表格组件的自定义代理功能,例如默认情况下表格中的缺省代理就是一个编辑框,我们只能够在编辑框内输入数据,而有时我们想选择数据而不是输入,此时就需要重写编辑框实现选择的效果...在自定义代理中QAbstractItemDelegate是所有代理类的抽象基类,它用于创建自定义的项委托。提供了一个基本的框架,使得可以定制如何在视图中绘制和编辑数据项。...我们继承任何组件时都必须要包括如下4个函数:CreateEditor() 用于创建编辑模型数据的组件,例如(QSpinBox组件)SetEditorData() 从数据模型获取数据,以供Widget组件进行编辑...}// 将代理组件的数据,保存到数据模型中void QWIntSpinDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,

    1K11

    HTML基础知识

    HTML的全局事件属性 Window窗口事件 onload,在页面加载结束后触发。 onunload,在用户从页面离开时触发,如单击跳转,页面重载,关闭浏览器窗口等。...Form表单事件 onblur,当元素失去焦点时触发。 onchange,在元素的元素值被改变时触发。 onfocus,在元素获得焦点时触发。...onreset,当表单中的重载按钮被点击时触发。 onselect,在元素中文本被选中后触发。 onsubmit,在提交表单时触发。...该属性不会对所有按键生效,不生效按键如:alt,ctrl,shift,esc。 onkeyup,当用户释放按键时触发。 Mouse鼠标事件 onclick,当在元素上单击鼠标时触发。...DIV+CSS div用于存放需要显示的数据,css用于指定如何显示数据样式,做到结构与样式相互分离。

    2.7K22

    浏览器事件

    窗口相关 onblur: 窗口失去焦点时触发。 onfocus: 窗口获得焦点时触发。 onresize: 窗口大小发生改变时触发。 onscroll: 窗口发生滚动时触发。...onbeforeinstallprompt: 当用户即将被提示安装web应用程序时,该处理程序将在设备上调度,其相关联的事件可以保存以供稍后用于在更适合的时间提示用户。...ontoggle: 该事件在用户打开或关闭元素时触发。 表单事件相关 onblur: 元素失去焦点时触发。 onchange: 该事件在表单元素的内容改变时触发。...onfocus: 元素获取焦点时触发。 onfocusin: 元素即将获取焦点时触发。 onfocusout: 元素即将失去焦点时触发。 oninput: 元素获取用户输入时触发。...拖动相关 ondrag: 该事件在元素正在拖动时触发。 ondragend: 该事件在用户完成元素的拖动时触发。 ondragenter: 该事件在拖动的元素进入放置目标时触发。

    2.4K20

    Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

    目录 1、QTableView类 2、QListView类 3、QListWidet类 4、QTableWidget类 5、QTreeWidget和QTreeWidgetltem类 ---- 表格与树解决的问题是如何在一个控件中有规律地呈现更多的数据...QListView是基于模型(Model)的,需要程序来建立模型,然后再保存数据。...QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元格数据是通过QTableWidgetltem 对象来实现的。...使用QTableWidget时就需要QTableWidgetltem,用来表示表格中的一个单元格,整个表格就是用各单元格构建起来的。...QTableWidget类中的常用方法如下表所示: 编辑规则的枚举值类型如下表所示: 表格的选择行为的枚举值类型如下表所示: 单元格文本的水平对齐方式如下表所示: 单元格文本的垂直对齐方式如下表所示

    3.4K20

    C#——DataGridView控件填写数据事件

    对于DataGridView控件,与单元格内容相关的有以下这几个事件: // 当单元格内容改变并且提交之后发生(提交一般是单元格在编辑完之后失去焦点...private void dataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e) { } // 在单元格完成编辑时发生...举个例子,我单击一个单元格,则单元格进入编辑状态,CellBeginEdit事件发生,然后我输入1,2……乃至更多的东西,上述的事件也不会发生。另外Key*系列的事件也试过,也没反应。...EditingControlShowing事件比上述事件还要早发生,他是dataGridView控件为了使用户可以编辑,而加载一个TextBox(如果单元格时复选框,是其他的控件,那么就加载对应的控件)...应该保存下来,然后在CellEndEdit事件中注销事件。

    1.6K62
    领券