代码之家  ›  专栏  ›  技术社区  ›  crew4ok

将模型设置为QTableWidget

  •  9
  • crew4ok  · 技术社区  · 16 年前

    5 回复  |  直到 8 年前
        1
  •  6
  •   Marc Mutz - mmutz    16 年前

    正如其他人所指出的那样,它不是 QTableWidget 你想要的。确实如此 QTableView

    static QList<QSqlRecord> selected_records( const QTableView * tv ) {
        // make sure we're really dealing with what we think we're dealing with:
        assert( static_cast<QSqlTableModel*>( tv->model() )
                == qobject_cast<QSqlTableModel*>( tv->model() );
        const QSqlTableModel * const tm = static_cast<QSqlTableModel*>( tv->model() );
        const QModelIndexList mil = tv->selectionModel()->selectedRows();
        QList<QSqlRecord> result;
        Q_FOREACH( const QModelIndex & mi, mil )
            if ( mi.isValid() )
                result.push_back( tm->record( mi.row() ) );
        return result;
    }
    

    clicked(QModelIndex) QAbstractItemView ),那么这段代码就是你想要的:

    void slotClicked( const QModelIndex & mi ) {
        // make sure we're really dealing with what we think we're dealing with:
        assert( static_cast<QSqlTableModel*>( tableView->model() )
                == qobject_cast<QSqlTableModel*>( tableView->model() );
        const QSqlRecord rec = static_cast<QSqlTableModel*>( tableView->model() )
                   ->record( mi.row() );
        // use 'rec'
    } 
    

    是的,Qt可以内置这个,尤其是。 QSqlTableModel QModelIndex QSqlRecord

        2
  •  2
  •   Aaron Digulla    16 年前

    QAbstractItemView QTableWidget 有一个无法更改的内置模型。

    selectedItems() 而不是 QTableView

        3
  •  0
  •   ufukgun    16 年前

    QTableWidget:Details

    如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。

    您是对的,似乎没有方法知道TableView或SQLModel的选择。您可以从TableView派生自己的类,并通过 selectionChanged slot .

    使用 QTableView::selectionModel() selection() answer

        4
  •  0
  •   Emile Vrijdags    16 年前

    如果你使用视图,你可以提供自己的模型。如果你使用小部件,那么你就不用使用qt模型,而是自己插入项目。最好你使用一个模型来解耦事物(这样你就可以对同一个模型有多个视图,或者以后更改模型……)

    可能有更多的方法可以做到这一点,但我就是这么做的,而且效果很好。

    http://doc.trolltech.com/4.5/model-view-programming.html

        5
  •  0
  •   Community Mohan Dere    8 年前

    class Q_GUI_EXPORT QTableWidget : public QTableView
    {
    ...
    ...
    private:
        void setModel(QAbstractItemModel *model);
    ...
    

    所以你不能从这里调用这个函数。..

    也许这不是一个好的答案,但至少它表明了为什么它不起作用。..