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

如何在关闭表单时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和相关技术,您可以根据您选择的云计算平台的特定要求和支持,选择适当的解决方案和产品。

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

相关·内容

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中添加记录,字段一定要完整,不能有空白字段,否则结果无法保存。切记。

15.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.2K20
  • 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.9K30

    HTML属性及事件

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

    2.8K20

    浏览器事件

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

    2.4K20

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

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

    1.3K100

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

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

    6.1K70

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

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

    20910

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

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

    1.9K60

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

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

    2K90

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

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

    83711

    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.4K90

    HTML基础知识

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

    2.6K22

    梳理下常见不冒泡事件

    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

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

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

    1.6K62

    在处理PowerBuilderitemchanged事件中,acceptText使用介绍

    代码例子(这里例子只需要看前面几行,后者): if dwo.name=”jyxm” then  //列名   dw_3.acceptText()  //提前存储   ls_jyxm = dw_3.getitemstring...( row, “jyxm”)  //这里可以获取到还没保存字符值。...注意点: 通常情况下,当用户移动到DataWindow中单元格,新数据将被验证和接受。 如果新数据导致错误,将显示一个消息框,这将导致DataWindow失去焦点。...如果您还将LoseFocus事件或从LoseFocus发布事件编码为调用AcceptText以在控件失去焦点验证数据,则此AcceptText会因为消息框而运行,并触发验证错误无限循环。...为了避免发生这种问题,在使用AcceptText,要确定此时鼠标焦点已经离开选中框中。

    1.3K20

    excel常用操作大全

    当你放开鼠标左键,一切都变了。 如果您在原始证书编号后添加19,请在B1单元格中写入:=A1 '13 ',然后按回车键。 2.如何在文件下拉窗口底部设置最近运行文件名数量?...4.使用Excel制作多页表单,如何制作一个类似Word表单标题,即每页第一行(或几行)是相同。但不是用头吗?...Ctrl+Shift *所选区域确定如下:根据所选单位格,数据单位格辐射最大区域。 11.如何在不同单位格?...选择具有所需源格式单元格,单击工具栏上“格式画笔”按钮,鼠标变成画笔形状,然后单击要格式化单元格以复制格式。 19.如何在表单中添加斜线?...如果您可以定义一些常规数据(办公室人员列表),您经常需要使用这些数据作为将来自动填充序列,这难道不是一劳永逸吗?

    19.2K10
    领券