QTableView 和QSqlQueryModel:怎样是好
-
我想做一个类似单击上的博客的东西,用来记录平常编程中遇到的一些知识,选择了Qt + Sqlite3架构;如图,点击左边的分类,在右边查询到与之相关的条目
http://img165.poco.cn/mypoco/myphoto/20120218/13/6469620420120218132904051.jpg
而采用Model-View的这种结构,右边的QTableView通过一个QSqlQueryModel传递查询到的值。现在的问题是,如何在用户点击不同的分类,右边显示相应的值呢?我采取的是每点击一次分类,然后通过分类名新建一个QSqlQueryModel,然后设置TableView的model为它,行倒是行,但是后来一想,感觉这样不好。
//获取指定分类的条目
QSqlQueryModel* DbCtrl::GetItems(const QString &classify)
{
QSqlQueryModel* sqlModel = new QSqlQueryModel();
if(classify == "全部")
sqlModel->setQuery("SELECT id,title FROM tbarticle", db);
else
{
QString str = "SELECT id,title FROM TbArticle WHERE classify = '" + classify + "'";
sqlModel->setQuery(str , db);
}
sqlModel->setHeaderData(0, Qt::Horizontal, "标号");
sqlModel->setHeaderData(1, Qt::Horizontal, "标题");
return sqlModel;
}
//点击分类列表:显示选择列表的条目
void AppMainWindow::on_listViewClassify_clicked(const QModelIndex &index)
{
QString classify = index.data().toString();
if(classify.isEmpty())
return;
currentClassify = classify;
QItemSelectionModel *m = ui->tableViewItems ->selectionModel();
ui->tableViewItems->setModel(dbctrl.GetItems(classify));
delete m;
}
而且,每次设置后,该不该delete掉前面的model呢?Qt帮助上没明说。
要么或者更新时,取出TableView的Model,然后重新设置SQL语句,然后在select()刷新呢?
求帮助!!! -
I have solved this problem.But thanks all the same.
-
应该删除model,
你使用new QSqlQueryModel();时没有给model指定父对象是谁,所以这些model如果你不删除的话,只能等到整个程序退出时,才会被释放.
程序运行时,这些没有了指针指向的model,就是内存泄露了.