这是我的代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("carl");
db.setUserName("root");
db.setPassword("123456ca");
tmb = new Manifest(this);
tmb->setTable("carl_table");
tmb->select();
ui->treeView->setModel(tmb);
}
我的应用有一个QTableView
,其中Manifest
为模型。
Manifest
是我的自定义QSqlTableModel
课程。原因是因为我计划通过覆盖标志来禁用某些列,并且它按预期工作。
我的SQL database
有两列,即id
,它是主键,name
是任意字符串。 Manifest
将设置为该表,它将获取内部的所有数据。
现在我的问题是,如何使我的应用程序动态化?这意味着,如果我的数据库表发生了变化,那么我希望我的应用程序能够自行更新。
这是我想到的方法:
创建一个在固定时间内运行tmb->select();
的线程。但我看到的问题是它会弄乱我当前的UI索引选择,所以它只能在几秒钟内编辑。
如果这是一个好方法,那么我该如何使其工作? 任何其他方法或解决方案也将不胜感激。
我检查并研究了SO并发现了与我类似的情况,但我不知何故得到解释。
编辑:我正在考虑获取主键,存储它,然后在刷新后再次重新选择它。关注我的是性能,因为我将不得不重新迭代以找到匹配的PK。此外,它将每秒运行。我正在努力实现这一点。
编辑#2:
我成功实现了自己的版本,但我不确定这是否已经过优化。我的过程是这样的:
select
将每1秒运行一次。select()
的实际行之前,将会记录点击的index
。select()
后,将恢复索引。