問題タブ [qpointer]

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 投票する
2 に答える
495 参照

c++ - C++ でターゲットが破棄されたときに自動的に null になるスマート ポインターはありますか

QPointerを見つけました。他にもありますか?

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

c++ - boost::bind の QPointer の特殊化はありますか

boost::bindboost::shared_ptr生ポインタと同じ方法で処理します 。

生のポインターポインターとしてboost::bind処理する が欲しいです。QPointers

に特化した人はいQPointerますか?

どこから始めればいいのか、何を専門にする必要があるのか​​わからない場合は、自分でできます。

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

qt - QPointer とオブジェクトの削除

QPointers新しい UI ダイアログ (ウィジェット) を表示するために使用する Qt アプリがあります。メイン アプリには、異なるデータをロードした同じウィジェットを多数含めることができます。私が抱えている問題は、各ウィジェットのメモリを削除して解放することです。プログラムのRAM使用量を監視すると、ボタンをクリックしてこれらの新しいウィジェットの1つを開くたびにRAMが増加し、ウィジェットを閉じるとRAMが解放されないようです. および他のソリューションを使用してみましdeleteLaterたが、プログラムでクラッシュが発生し続けます。

サンプルコードは次のとおりです。

これは(非モーダル)ListReservationsとして宣言された " " ウィジェットを呼び出します。QDialogそのダイアログには、QWidget::close()スロットを呼び出すウィンドウを閉じるボタンがあります。

QPointer問題は、ダイアログが閉じられたときに私のメインプログラム( .

QConnect()オブジェクトに aを実行できると思いましたQPointerが、ポインターの受け渡しを許可する信号またはスロットが見つからないようです。ダイアログが実際に閉じられて削除の準備ができたら、信号を送信することはほとんどありません。

QDialogたぶん、メインプログラムで、汎用ポインターオブジェクトを受け取り、それを呼び出す前に独自のクローズスロットを呼び出す何らかの関数が必要ですか? その機能では、それ自体が破壊されることになりますか? 実装しようとして失敗したアイデアを捨てるだけです....

ListReservations理論的には同時に複数のウィンドウを開くことができるため、同じポインターを他の場所で再利用できるとは思いません。

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

c++ - QPointer を std::map のキーにすることはできますか

連想コンテナに関する SGI のドキュメントによると、「要素はキーに従って格納されるため、各要素に関連付けられたキーは不変であることが不可欠です」。ポインターを std::map へのキーとして使用することがあります。これは、ポイントされたオブジェクトが変更可能である可能性がありますが、ポインター自体は定数であるためです。

QPointer は技術的にはポインターを模倣したオブジェクトであり、Qt のドキュメントには、QPointer をポインターとまったく同じように使用できると書かれています。QPointer オブジェクト自体は実行中に変更される可能性があるため、std::map コンテナーのキーとして引き続き使用できますか?

編集 1: QMap を使用できません。std::map に固執する必要があります。
編集 2: QPointer を使用すると、コードがコンパイルされます。問題は、実行時に不愉快な驚きを期待すべきかどうかです。

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

c++ - 抽象基本クラスの QPointer

式解析ライブラリを作成しています。これは Qt で書かれており、私は次のようなクラス構造を持っています:
QCExpressionNode-式のすべての部分の抽象基底クラス -式の
QCConstantNode定数 (extends QCExpressionNode)
QCVariableNode-式の変数 (extends QCExpressionNode)
QCBinaryOperatorNode-2 進数の加算、減算、乗算、除算および電力事業者 (延長QCExpressionNode)

QPointerスマート ポインター (や など)を使用できるようにしたいのQSharedPointerですが、次の課題に直面しています。 - 抽象クラスで使用
できますか? QPointerもしそうなら、例を挙げてください。-具体的なサブクラス
にキャストする方法は?QPointer

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

multithreading - マルチスレッドプログラムのQPointer

http://doc.qt.io/qt-5/qpointer.htmlによると、QPointerは非常に便利です。しかし、次のコンテキストでは非効率的である可能性があることがわかりました。

ラベルを3回表示したい場合、または何か他のことをしたい場合は、

if(label) label->show1(); if(label) label->show2(); if(label) label->show3();

それ以外の if(label) { label->show1();label->show2();label->show3(); }

またはの後に別のスレッドでラベルが破棄される可能性があるという理由だけでlabel->show1();label->show2();.

同じ機能を取得するための3つのif以外の美しい方法はありますか?

もう1つの質問は、if(label)の後にラベルが破棄されても、if(label) label->show1();まだ間違っているということです。

マルチスレッドプログラムの経験がありません。どんな助けでも大歓迎です。;)

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

c++ - 派生オブジェクトを含む QPointer は、ベースクラスと一致しません

変なタイトルですみません、思いついたらもっといいタイトルを考えてください。

これが私の問題です。

次のような構造があります。

QObject -> MyBase -> MyDerived

次に、派生型のいずれかを QPointer として受け取る関数があります。

QPointer<MyDerived>問題は、この関数に渡すことができないことです。これは、標準のポインターを使用した場合です。関数に適合させるために、このオブジェクトをキャストする必要がありますか? それとも、通常のポインターを使用する必要がありますか?

また、失敗したオブジェクトを割り当てるときの標準的な動作を知っている人はいますか? これを常にtryブロックで行うか、何かでラップしてnullかどうかを確認する必要がありますか? Qtのドキュメントを読んだところ、割り当てに失敗した場合、ほとんどのクラスがnull値を返すとのことでした。try-catch を使用したくない場合はどうすればよいですか?

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

qt - QHashへのQPointer

QPointerをQHashで使用することは可能ですか?

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

qt - オブジェクトメソッドにアクセスするための QPointer

QPointer関連していない別のオブジェクトからオブジェクトメソッドにアクセスするために使用すると、奇妙な問題が発生します。

よりよく説明するために、小さな例を用意しました。

QWidgetシンプルに Widget_A と Widget_B の2 つを作成しましたQDialog

Widget_B から Widget_A の public メソッドにアクセスする必要があります。割り当てのために、widget_a のポインターを widget_b のメソッドに渡しましQPointerた。Widget_A には、QLineEditWidget_B からクリアしたい が含まれています。

問題は、pushButton_B を押しても lineEdit_A に何も起こらないことです。コンソールには問題が表示されないため、最も明白な理由は、Widget_B が、私が渡したオブジェクトではなく、別の Widget_A オブジェクトで動作していることです。

QWidget_A から QWidget_B への接続も作成したので、lineEdit_A を編集すると、label_B テキストがそれに応じて変更されます。これは機能します。

質問する前QPointerに、実際のプロジェクトでは Widget_A が削除される可能性があるため、 が必要です。どこが間違っているのか説明してもらえますか? 別の方法を選択する必要がありますか? ありがとう。いくつかのスニペットに従ってください

widget_a.h

widget_a.cpp

widget_b.h

widget_b.cpp

dialog.h

ダイアログ.cpp