問題タブ [qabstracttablemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3274 参照

c++ - ロールを使用して QAbstractTableModel headerData を変更する

私はサブクラスを持っています

headerData次のようにメソッドをオーバーライドします。

次のように設定する方法がありQTableViewますTableModel* table

と の 2 つのQTableViewオブジェクトがViewAありviewBます。のヘッダーが必要で、ViewAのヘッダーが必要です。ロールを使用してビューごとに headerData を変更するにはどうすればよいですか。role == Qt::DisplayRoleviewBrole == TableModel::CurrencyRole

ありがとうございます。詳細を省略したり、質問で不明な点がありましたらお知らせください。

0 投票する
2 に答える
2643 参照

c++ - データベース接続が変更された後にQSqlTableModelを更新する方法が変更されました

から派生したクラスがありQSqlRelationalTableModelます。SQLiteデータベースを使用しています。そして、データベースファイルを変更する必要があります。古いデータベースファイルを閉じ、SetDatabaseName( "新しいファイルへのパス")を呼び出して、新しいデータベースファイルを開きます。モデルに対してselect()を呼び出すだけですが、falseが返されます。そして、setTable( "table")を呼び出し、その後select()を呼び出すと、すべてが機能します...しかし、テーブルの名前は同じです...

データベース接続が変更されたことをモデルに通知できる方法が見つかりませんでした。モデルに通知するためのより良い方法を知っていますか?


Ok。もう一度このトピックに戻りました。

dbを変更した後、同じテーブル名でsetTable()を呼び出して、テーブルモデルを再開する必要があります。そして、私はテーブルビューを再開するためのより良い方法を見つけられませんでした。

これにより、多くの不要なコード呼び出しが生成されますが、それ以外の場合、テーブルビューはテーブルモデルの変更(列数など)を認識しません。

QSqlTableModel再初期化するためのより良い方法が見つかりませんでしたQTableView。いくつかのアイデア?

0 投票する
1 に答える
1877 参照

c++ - Qt:モデル/ビューのセットアップで複数のスレッドからのデータへのアクセスを同期するにはどうすればよいですか?

Qtモデル/ビューセットアップで複数のスレッドからアクセスされるデータへのアクセスを同期する方法は?

私はクラスで使用QTableViewしています。Model

Model拡張し、呼び出しを通じて表示される実際のデータを保持QAbstractTableModelするカスタムクラスのインスタンスがあります(によってアクセスされます)NetQTableViewdata()Model::data()

私のクラスはネットワークデータをリッスンし、データを更新する別のスレッドで実行されます(10文字列の単純な固定サイズの配列)。

data()私のクラスのデータには、常に更新するスレッドと、を呼び出してQtGUIの両方からアクセスする必要がありますModel

文字列の配列へのアクセスを同期するためにmutexを使用する必要があると思いますが、これQAbstractTableModel::data()constメソッドであるため、ロックboost::mutexインできません。

データを拡張QAbstractTableModelして提供するクラスのデータへのアクセスを同期するための一般的なパターンは何QTableViewですか?

0 投票する
1 に答える
3610 参照

qt - QTableViewはdataChanged信号に反応しないようです

以下に、私のカスタムテーブルモデルを示します。そのテーブルモデルをQTableViewと一緒に使用しようとしています。テーブルモデルのappendメソッドが呼び出された場合、テーブルビューがその内容を更新することを期待します。しかし、そうではなく、理由もわかりません。ただし、同じテーブルモデルをQListViewと一緒に使用すると、すべてが正常に機能します。つまり、テーブルモデルの追加が呼び出されると、リストビューはその内容を更新します。QTableViewの場合に何か特別なことをする必要がありますか?

0 投票する
2 に答える
546 参照

c++ - 基礎となるqmapが更新されると、c++ qt qabstracttablemodelサブクラスがクラッシュする

カスタム qabstracttablemodel の更新で大きな問題が発生しています。複数の株式の価格を表示するテーブルビューが必要です。私が制御するローカル サーバーから価格を取得します。このセットアップはテスト用です。価格情報はワーカー スレッドで受信されます。

次の方法で qabstracttablemodel をサブクラス化しました。

PriceModel.h:

PriceModel.cpp

setTickMap( qmap<...> ) メソッドを呼び出すと、モデルがテーブルビューに入力され、すべての異なる株式が期待どおりに表示されます。(私のモデルのデータの初期化は正常に機能しています)

setTickMap( qmap<...> ) メソッドを再度呼び出したいときに問題が発生します。アプリケーションがクラッシュし、その理由がわかりません。重大なエラー メッセージ (segvault) も表示されません。

デバッグ構成 netbeans でクラッシュすると、次の内容の「Disassemlby」という名前のタブが開きます。

beginResetModel() メソッドでマップの割り当てを挟みましたが、アプリケーションがクラッシュするだけなので、うまくいかないようです。奇妙なことに、これは setter メソッドの最初の呼び出しで機能します。これはかなりばかげた間違いだと思います。最初の呼び出しが正常に機能するため、スレッド間通信の問題と関係があることを除外できると思います。

このモデルはユーザーが GUI を介して編集することは想定されておらず、テーブルウィジェットを使用してデータを表示することもできましたが、このモデル情報を共有する別のビューがあるかどうかはわかりません。現在の価格のマップはそれほど大きくない (25 アイテムがトップ) ため、新しい価格が入るたびにモデルをリセットするのは不快ではありません.

事前に感謝します。誰かがこのマイクロポートで私を助けてくれることを願っています

0 投票する
2 に答える
7130 参照

c++ - QTableViewは値に基づいて行の色を変更します

QTableViewからサブクラス化した独自のモデルで実装した がありQAbstractTableModelます。行のフィールドの 1 つに特定の値がある場合、行の色を赤に変更できるようにしたいと考えています。setDataモデルを呼び出しQt::BackgroundRoleて背景色を変更するのが答えである例をたくさん見ました。をサブクラス化したので、AbstractTableModel再実装setDatadataたため、役割が であるデータのみを処理しているため、モデルの呼び出しsetDataは背景色の役割で何もしませんQt::DisplayRole

私の最初の質問は、役割全体の色を変更する簡単な方法はありますか? setDataそうでない場合は、その部分を実装し、その方法がわからない をdata処理する必要があると思います。これを行う方法の例があれば、非常に役立ちます...BackgroundRole

0 投票する
3 に答える
3296 参照

java - JTablesで使用できる汎用のTableModelはありますか?

現在、JTableを調べており、Hibernate + SpringDataJPAを使用してDBから取得する多数のビジネスオブジェクトがあります

Spring Data JPAがDALの面倒な実装をすべて処理するのが大好きで、に似たものがあるかどうか疑問に思っていましたTableModel

基本的に、私は次の線に沿って何かを持っているでしょう:

public class GenericTableModel<T> extends AbstractTableModel

そして、GenericTableModelリフレクションやアノテーションを使用してを調べますT

このようなものはありますか?JTableに表示するオブジェクトごとにTableModelを用意する必要がないことを願っています。

0 投票する
2 に答える
255 参照

qt4 - Qt4 のモデルにアイテムを追加し、新しく追加されたアイテムのインデックスを取得する方法

databaseTreeViewQAbstractTableModelのサブクラスに (QSortFilterProxyModel を介して) QTreeView ()を含むウィンドウがあります。を呼び出す[追加]ボタンがありますui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());。[Edit] ボタンもあり、これを使用ui->databaseTreeView->selectionModel()->currentIndex();して、インデックスをエディター ウィンドウに渡します。

[追加]ボタンで新規作成した項目のインデックスでエディタが自動で開くようにしたいのですが、モデルがソートされているため、行を挿入した行番号が使えません。PlusinsertRows()はboolのみを返します(私の状況ではインデックスの方がはるかに便利なので、新しく追加されたアイテムのインデックスを取得する方法を誰かが教えてくれるかどうか疑問に思っています)。

他に方法がない場合はリファクタリングに 2 時間か 3 時間を費やしたいと思いますが、それはかなり単純なはずだと思っていたでしょう。私はQAbstractItemModel::rowsInserted信号を興味深く見ていますが、それは私が与えた行を返すだけでinsertRows()、追加されたばかりのアイテムであるかどうかに関係なく、リストの最後のアイテムを編集します。

完全なソースはhttps://github.com/megamasha/FlashKardで見つけることができ、誰でも詳しく見ることができます。

0 投票する
1 に答える
2029 参照

c++ - QAbstractTableModelモデルをフィルタリングする方法

tableModelというQAbstractTableModelモデルとlistModelというQAbstractListModelモデルを作成し、これらのモデルをそれぞれのビュー(QTableViewとQListView)に設定しました。listModelに基づいてtableModelをフィルタリングします。つまり、誰かがリストアイテムをクリックすると、テーブルビューが表示されます。リスト項目に基づいてフィルタリングされます。これらのモデルは完全に機能しています。フィルタリングを行う方法を教えてください。

QSqlModelでは、SQL関係を持つsetFilterメンバーを使用してこれを行うことができます。

0 投票する
1 に答える
4872 参照

qt - emit dataChanged(createIndex(1,1),createIndex(1,1)) は、多くの ::data 呼び出しをもたらします

QTableView と、対応する QAbtractTableModel の子のインスタンスがあります。

テーブル モデル インスタンスが 1 つのセルを指定する dataChanged を発行すると、Qt フレームワークがテーブル モデルの ::data() メンバー関数に対して多数の呼び出しを発行することに驚きました。これらの呼び出しの行/列の範囲は、画面上にあるものの範囲全体 + 余分なものをカバーしているように見えます。

これは私が予想した以上のものです。単一のセルに名前を付ける dataChanged() は、そのセルのデータを要求する ::data() 呼び出しのみになると考えていました。結局のところ、私のテーブル モデルが変更されたと言った唯一のセルです。しかし、Qt フレームワークは非常に群生しているようで、すべてのセルについて問い合わせます。

私は明らかに dataChanged() シグナルの意図を理解していません。

QTableView に 1 つのセルと 1 つのセルのみを更新するように指示する方法はありますか?

更新: コード サンプルを含む ここの例は、テーブルを作成するためのヘッダー、ソース、およびコードのチャンクです。私の場合、テーブルは 12 列 29 行で表示されます。最後の「issueEmit」呼び出しの後、::data は、1 つのセルに対する dataChanged() シグナルのために、全部で 1044 回呼び出されます。