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()刷新呢?
    求帮助!!!



  • can u please explain it in english



  • I have solved this problem.But thanks all the same.



  • [quote author="cdeepak" date="1329721823"]can u please explain it in english[/quote]

    The post is in the Chinese forum. It's perfectly ok to post in native language in the native forums.



  • ...

    void refreshByClassify( const QString &classify )
    {
    QSqlQueryModel model = dynamic_cast<QSqlQueryModel>(view->model());

    //model->execute sql;
    
    model->select();
    

    }



  • 应该删除model,

    你使用new QSqlQueryModel();时没有给model指定父对象是谁,所以这些model如果你不删除的话,只能等到整个程序退出时,才会被释放.

    程序运行时,这些没有了指针指向的model,就是内存泄露了.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.