QDialogに10個のQComboBoxがあります。そして、私はDialogを開いている間、これらのコンボボックスにデータを書き込んでいます。コンボボックスにクリックされたスロットがないので、Dialogをロードするのに7秒かかります。私はスレッドを使ってこの問題を解決できると思うが、私はQThreadを知らない。QComboBoxでデータを埋めるためにQDialogのスレッディングを使用するには?
答えて
QTではウィジェットがメインスレッド外で修正されることはないため、解決策は簡単ではありません。
単純な解決策: スレッドを使用してデータをQStringListsに配置し、addItemsを使用して設定します。 QThreadPoolはこの用途に使用する方が簡単です。 この問題は、問題が処理ではなくデータ自体のサイズである場合に役立ちません。
複雑なソリューション(学習のための素晴らしい): あなたはしかし、ウィジェット(QAbstractItemModel)のモデルを再実装、およびモデルにQThreadを使用することができます。
また、setVisible(bool)を真に上書きするだけで、setVisibleが初めて呼び出されたときにデータをロードする独自のQListView派生クラスを作成することもできます。 このクラスのインスタンスをsetView()で各コンボボックスに設定します。
QThreadの使い方については、例を参照してください。チュートリアルを読む...ここで説明するのは複雑ですが、ネット上に例とチュートリアルがたくさんあります。
その後編集:
イベントフィルタを使用することも可能があります:
// Install event filter
MyDlg::MyDlg()
{
qApp->installEventFilter (this);
}
// search for the view of the combo to be activated
// and fill it.
bool MyDlg::eventFilter (QObject * obj, QEvent * event)
{
QSet<QAbstractItemView *> myComboViews;
my_combos.insert(combo1->view());
if (event->type() == QEvent::Show)
{
QAbstractItemView * view = qobject_cast<QAbstractItemView*>(obj);
if (myComboViews.contains(obj) && view->isVisible())
{
fillComboView(view);
}
}
return QDialog::eventFilter (obj, event);
}
コードがテストされていないが、あなたはideeaを得ることができます。
ありがとうDragos、私はあなたが言ったようにスレッドを行うことを試みています。コンボボックスのようなイベントがありますか?それについての詳細を教えてください。 – pravin
このために放出された信号は見つかりませんでしたが、イベントフィルタを使用できます。マウスクリックがフィルタリングするのが難しいため、ドロップダウンボタンにアクセスできないため、コンボの表示でshowイベントを使用することをお勧めします。 –
- 1. DataGridを更新するためのスレッディング
- 2. Nightwatch - テーブルのデータセルを埋めるためにexecuteを使用する
- 3. 配列を埋めるためにインスタンスを使用してUITableviewをポピュレートする
- 4. 埋め込みリソースを使用するためのガイド
- 5. persistence.xmlのデータを埋めるためにgradleの変数を定義する
- 6. ペアCPPまたは埋めるためにマップを使用して印刷
- 7. 特定のリンクのみを埋め込むためにembed.lyを使用する
- 8. RxJavaでスレッディングを使用するには?
- 9. QComboBoxまたはQCompleterにボタンを含める
- 10. C#を使用してListViewでデータを埋める方法
- 11. 埋め込みGeoJsonPointフィールドで$ geoNearを使用するには?
- 12. Qtスタイルシートで埋め込みフォントを使用するには?
- 13. 埋め込みiframeでVimeoリンクを使用するには
- 14. 埋め込みファイルでPHPセッションを使用するには?
- 15. Pythonスクリプトを改善するためにスレッディングを使うべきですか?
- 16. mongooseスキーマに埋め込みオブジェクトを使用するには?
- 17. MySQLでデータベーステーブルを埋めるためにループを実行するには?
- 18. エレベーターシミュレーションのためのPythonスレッディング
- 19. リモートデスクトップにあるプログラムでフォームを埋めるためのJava API?
- 20. 多くのデータでコアデータデータベースを埋めるためにデータを管理する方法(編集:タイトル変更)
- 21. 平均を取るために丸めたデータを使用する
- 22. Mulitsamplingを使うためにSwapChain Structを正しく埋めるには?
- 23. セレンでウェブスクラップするためのスレッディングまたはマルチプロセッシング
- 24. データを収集して埋め込み可能なPDFにデータを集めるためのWebベースのフォーム
- 25. matplotlib補間データ用の配列を埋めるためのscipy ndimage
- 26. TKinterを埋めるために左右のフレームを取得するには?
- 27. データを保存するために使用できる技術
- 28. スレッディングのためにクロージャーが外に移動する
- 29. 残高を埋めるためにdivを設定する
- 30. 埋め込み1:1データをCouchDbドキュメントにプルするには
質問を編集して[これまでに試したこと](http://whathaveyoutried.com)を表示してください。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –