2016-10-22 1 views
0

データベースからtableViewを作成しました。次に、このtableViewのすべてのデータのテキストをどのように設定するのですか?私は時間がかかるので、forループを使用してtableViewの各項目を設定したくない。次のようにどのようにFORループを使用せずにtableView内のすべてのデータのテキストの配置を設定するには?

メインのコードは次のとおりです。

QSqlRelationalTableModel *model= new QSqlRelationalTableModel(NULL, db);  
model->setTable(dbName); 
model->select(); 

QTableView *tableView = new QTableView(NULL); 
tableView->setModel(model); 

一部はQSqlRelationalTableModelのサブクラスを作るために提案することができるが、これはまた、すべてのデータを設定するforループを必要としています。他の選択肢はありますか?ありがとうございました。

+0

あなたは 'QIdentityProxyModel'ソリューションをテストしましたか?私は自分自身をテストする時間がありませんし、それが意図したとおりに動作するかどうかを知りたいと思っています。 – iksemyonov

+0

ソリューションが機能するかどうかチェックしましたか? – iksemyonov

答えて

3

QIdentityProxyModelを使用してください(ただし、4.8から - QAbstractProxyModelというアイデアは同じですが、前者は必要なメソッドのみを再実装することで時間を節約する便利なクラスです)。このアプローチは、要素ごとに要求が要求された瞬間にデータが設定されて返されるため、ループを使用しないようにします。つまり、すべてのデータを繰り返し処理し、必要な値を設定するのではなく、ビューのデータを提供するクラスのメソッドを変更します(宣言的なアプローチのほうが多い)、ビューはデータを取得しますそれ自体で必要なとき。 QIdentityProxyModelクラスは、そのソースモデルが変更されていないプロキシ

http://doc.qt.io/qt-5/qidentityproxymodel.html

:ドキュメントを引用する

。ソートやフィルタリングは行われないため、このクラスはソースモデルのdata()を変換するモデルをプロキシするのに最適です。 たとえば、使用するフォント、背景色、ツールチップなどを定義するプロキシモデルを作成することができます。これにより、モデルの構造を作成する同じクラスですべてのデータ処理を実装する必要がなくなります。再使用可能なコンポーネントを作成するためにも使用できます。私たちのケースでは

は、可能な実装は、次のとおりです。あなたが見ることができるように、モデル自体を通じてQt::TextAlignmentRoleに一致しないデータの一部を通過して、目的の値を返します

class StylingProxyModel : public QIdentityProxyModel 
{ 
    QVariant data(const QModelIndex &index, int role) const 
    { 
    if (role != Qt::TextAlignmentRole) 
     return QIdentityProxyModel::data(index, role); 

    return Qt::AlignCenter; 
    } 
}; 

さもないと。

QSqlRelationalTableModelをこのカスタムアイデンティティモデルのソースとして設定し、プロキシモデルをビューのソースに設定します。

「重い砲兵」オプションはQStyledItemDelegateのサブクラスになりますが、テキストの配置を設定するよりも深遠な方法でビュー/デリゲートの外観を変更するタスクに適しています。

さらに読むためにSet color to a QTableView rowを参照してください。

関連する問題