Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. QTableView 和QSqlQueryModel:怎样是好
QtWS25 Last Chance

QTableView 和QSqlQueryModel:怎样是好

Scheduled Pinned Locked Moved Chinese
6 Posts 4 Posters 8.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    soleverlee
    wrote on 18 Feb 2012, 05:20 last edited by
    #1

    我想做一个类似单击上的博客的东西,用来记录平常编程中遇到的一些知识,选择了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()刷新呢?
    求帮助!!!

    1 Reply Last reply
    0
    • ? This user is from outside of this forum
      ? This user is from outside of this forum
      Guest
      wrote on 20 Feb 2012, 07:10 last edited by
      #2

      can u please explain it in english

      1 Reply Last reply
      0
      • S Offline
        S Offline
        soleverlee
        wrote on 20 Feb 2012, 09:00 last edited by
        #3

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

        1 Reply Last reply
        0
        • G Offline
          G Offline
          goetz
          wrote on 20 Feb 2012, 10:54 last edited by
          #4

          [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.

          http://www.catb.org/~esr/faqs/smart-questions.html

          1 Reply Last reply
          0
          • W Offline
            W Offline
            wynner
            wrote on 27 Dec 2012, 01:26 last edited by
            #5

            ...

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

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

            }

            1 Reply Last reply
            0
            • X Offline
              X Offline
              xisuosunboy
              wrote on 21 Feb 2013, 12:59 last edited by
              #6

              应该删除model,

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

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

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved