问题标签 [qsqltablemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6945 浏览

c++ - 如何在保留选择的同时刷新 QSqlTableModel?

我正在使用QSqlTableModelandQTableView来查看 SQLite 数据库表。

我想让表每秒左右自动刷新一次(它不会是一个非常大的表 - 几百行)。我可以这样做 - 像这样:

但这会删除我拥有的任何选择,因此选择最多只能持续一秒钟。这很烦人,因为 GUI 中的另一个窗格取决于选择的内容。如果未选择任何内容,则它会重置为说明启动页面。

然后我尝试了一种有点 hacky 的方法,它获取选定的行号,重置表,然后选择该行。但这也不起作用,因为选定的行可以根据对表格的添加向上或向下移动。

我知道其他班级有dataChanged()信号,这将是理想的。

你们有谁知道我如何让表刷新以反映对数据库的更改(来自命令行使用或程序的其他实例)并保持当前选择?

我知道我可以从当前选择中获取数据,然后在重置后搜索同一行,然后重新选择它,但这似乎是一个适得其反的问题解决方案。

编辑:目前的解决方案尝试:

好的,所以这或多或少现在有效......

0 投票
0 回答
665 浏览

sql - 使用 QTableView 和 QSqlTableModel 进行类似网格的内联编辑

我试图让 QTableView 表现得像一个网格表,即底部总是有一个空行,用户输入要插入的新记录。想想 MS Access 子表单,或者在 web 开发中,我认为我们称之为内联编辑。

我正在使用 Qt 4.7.4,非常标准的代码:

如果将 insertRow 或 insertRecord 放入构造函数中,则不会发生任何事情。没有添加行。但是,如果我创建一个调用其中任何一个的按钮,则会添加一个新行,但它是uneditable

要观察这一点,请尝试修改Qt 的缓存表示例,如果放入构造函数中,添加 insertRow() 将无济于事。但是,在从按钮调用的插槽中,它将很好地添加行。不可编辑,当然。

所以我的问题是:

  1. 为什么会这样?我已经看够了 QSqlTableModel 的源代码,但要理解它,我们还需要了解 QSqlRecord、QSqlQuery、QAbstractItemModel 等......我无法理解它。
  2. 为了解决不可编辑的行,我将 QSqlTableModel 重写为 flags() 以返回 Qt::ItemIsEditable 和 Qt::ItemIsenabled 无济于事。我做错了什么?
  3. 我知道我最终将继承 QTableView 以获得这种行为,所以如果有人对我有一些指示,我将不胜感激,也许我可以阅读一些项目的源代码。

谢谢,

埃文

0 投票
1 回答
2029 浏览

qt - 将新记录插入 QSqlTableModel 期间的默认 DB 值

如何针对 DB 的默认值向 QSqlTableModel 插入新记录?UPD:我正在尝试调用pTableModel->insertRecord(0, pTableModel->record(0)); or pTableModel->insertRecord(0, pTableModel->record()); or pTableModel->insertRecord(QSqlDatabase::database().record("tableName")); orpTableModel->insertRow(0);

结果相同,所有字段都是NULL而不是DB的默认值。

0 投票
1 回答
2668 浏览

python - 一键延迟QTableView中的PyQt4 Selected Item Text

我正在使用 aQTableView来显示 a 的内容QSqlTableModel以及使用 aQSortFilterProxyModel来过滤记录。在下面的代码中,我设法在用户单击单元格时显示选定的文本(无论是否应用了过滤器)。但是,它总是在后面单击 1 次,开始后的第一次单击会导致一次单击,IndexError: pop from empty list并且当在同一行中选择新列时,什么也不会发生。

我在初始化表后尝试选择索引,似乎没有做任何事情。我不知道下一步该尝试什么?

0 投票
1 回答
738 浏览

c++ - 带有 QSqlTableModel 的 QTableView 的数据输入

我有一个基本的 QTableView,它使用 QSqlTableModel 显示来自 SQLite 表的数据。

数据输入由父对话框完成,该对话框具有许多代表字段数据的小部件和一个“添加”按钮。数据删除是通过“删除选定的行”按钮完成的。

一切都非常实用,但我发现它非常笨重,想尝试一种更好的方式。

理想情况下,我希望视图中有一个空行,用户可以简单地开始输入他们的数据。在每一行的末尾有一个用于删除该特定行的按钮(有点像垂直标题,但有一个按钮而不是行号)。

我认为这可以通过子类化 QTableView 来实现,但是必须重新绘制所有内容的想法有点令人生畏......

有没有人对我如何解决这个问题有建议,也许使用代表(诚然我以前没有使用过的东西)或我忽略的另一种更简单的方法?

0 投票
0 回答
724 浏览

pyqt - 当 setOrientation 为 Vertical 时,QDataWidgetMapper 在 PyQt 中无法与 QSqlTableModel 一起正常工作

我有一个奇怪的问题。如果我只将两个小部件映射到 SQLITE 表的前两行(“simpletable”),则以下代码可以完美运行。小部件在启动时填充,当我编辑小部件并单击按钮并调用 mapper.submit() 时,表格已正确更新。

但是,一旦我映射了第三个小部件,小部件值就会在启动时正确填充,但是在调用 mapper.submit() 时出现错误并且不再有映射工作。

“simpletable”只是一组带有文本值的简单行和列:

当方向设置为水平时,列被正确映射并且一切正常。关于问题可能是什么的任何建议?

0 投票
1 回答
366 浏览

qt4 - QSqlTableModel/ QTableView 解析查询到xml

这是我在这个论坛上的第一篇文章,我希望我要求解决的问题得到清楚的解释。我正在使用 QSqlTableModel 和 QSqlTableView 查看数据库表。缓存表模型是我一直在寻找的,这就是我选择 QSqlTableModel 的原因(还有其他模型吗?)。现在我需要将所有缓存的查询解析为 xml,一旦我执行 submitAll() - 我选择了 OnManualSubmit 作为编辑策略。我尝试编写 QSqlTableModel 的子类并重载 insertRowInTable/updateRowInTable/deleteRowFromTable,但是缓存是由指向私有类的 d 指针访问的,我找不到另一种方法来获取缓存的准备语句,然后将它们解析为 xml . 我认为这个解决方案是不可能的吗?

我期待着任何答复。

0 投票
0 回答
336 浏览

sql - 如何根据我的 Sqlite 查询选择 QTableView 行?

我的应用程序是一个有两个窗口的应用程序,其中一个您可以更改添加到我的 SQL DB 的位置和标记点,另一个您可以查看标记点。

我有QTableView一个QSqlTableModel。该模型连接到一个以t_point下列命名的表:

  • id 整数 PRIMARY KEY
  • 位置整数

我想要做的是:在一个窗口中单击表格并自动移动到另一个窗口中的位置。( 这个完成了 )

移动位置并自动选择QTableView位置最近的项目。这是交易,我想快速而干净地做到这一点。因此,我使用 aQSqlQuery通过以下查询获取最接近的项目:

所以 ai 让它们按与该点的距离排序,我使用query.next()并得到两个值。索引和位置。

那么现在我如何选择QTableView修正这个值的行呢?

我不能使用selectRow( int row ) from QTableView,因为我没有一行,我得到了钥匙和位置......

我得到的唯一解决方案是查看我在模型上的身份或位置。但这太可怕了。

0 投票
1 回答
815 浏览

qt - QListView 在编辑时失去选择

我有一个 QListView 从 QSQLTableModel 中提取数据。

用户单击“添加”按钮后,我添加了一个新项目并将其打开以进行编辑:

但是一旦用户完成了对新值的编辑,listView 的选择就会丢失。我在 QListView 或 QSQLTableModel 上找不到信号来处理何时和编辑完成,以便我“恢复”选择。

有没有办法可以确保保留选择?

0 投票
1 回答
569 浏览

submit - 如何在 QSqlTableModel 中只提交一行?

我使用 QSqlTableModel 和 OnManualSubmit 编辑策略。
我有可能使用 revertRow() 方法恢复某些行的更改。
但是我怎样才能只提交一行表格呢?我只有 submitAll() 方法。
我可以使用 insertRowIntoTable(),但它是受保护的,我不想继承 QSqlTableModel。