問題タブ [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.
c++ - C++ でターゲットが破棄されたときに自動的に null になるスマート ポインターはありますか
QPointerを見つけました。他にもありますか?
c++ - boost::bind の QPointer の特殊化はありますか
boost::bind
boost::shared_ptr
生ポインタと同じ方法で処理します 。
生のポインターポインターとしてboost::bind
処理する が欲しいです。QPointers
に特化した人はいQPointer
ますか?
どこから始めればいいのか、何を専門にする必要があるのかわからない場合は、自分でできます。
qt - QPointer とオブジェクトの削除
QPointers
新しい UI ダイアログ (ウィジェット) を表示するために使用する Qt アプリがあります。メイン アプリには、異なるデータをロードした同じウィジェットを多数含めることができます。私が抱えている問題は、各ウィジェットのメモリを削除して解放することです。プログラムのRAM使用量を監視すると、ボタンをクリックしてこれらの新しいウィジェットの1つを開くたびにRAMが増加し、ウィジェットを閉じるとRAMが解放されないようです. および他のソリューションを使用してみましdeleteLater
たが、プログラムでクラッシュが発生し続けます。
サンプルコードは次のとおりです。
これは(非モーダル)ListReservations
として宣言された " " ウィジェットを呼び出します。QDialog
そのダイアログには、QWidget::close()
スロットを呼び出すウィンドウを閉じるボタンがあります。
QPointer
問題は、ダイアログが閉じられたときに私のメインプログラム( .
QConnect()
オブジェクトに aを実行できると思いましたQPointer
が、ポインターの受け渡しを許可する信号またはスロットが見つからないようです。ダイアログが実際に閉じられて削除の準備ができたら、信号を送信することはほとんどありません。
QDialog
たぶん、メインプログラムで、汎用ポインターオブジェクトを受け取り、それを呼び出す前に独自のクローズスロットを呼び出す何らかの関数が必要ですか? その機能では、それ自体が破壊されることになりますか? 実装しようとして失敗したアイデアを捨てるだけです....
ListReservations
理論的には同時に複数のウィンドウを開くことができるため、同じポインターを他の場所で再利用できるとは思いません。
c++ - QPointer を std::map のキーにすることはできますか
連想コンテナに関する SGI のドキュメントによると、「要素はキーに従って格納されるため、各要素に関連付けられたキーは不変であることが不可欠です」。ポインターを std::map へのキーとして使用することがあります。これは、ポイントされたオブジェクトが変更可能である可能性がありますが、ポインター自体は定数であるためです。
QPointer は技術的にはポインターを模倣したオブジェクトであり、Qt のドキュメントには、QPointer をポインターとまったく同じように使用できると書かれています。QPointer オブジェクト自体は実行中に変更される可能性があるため、std::map コンテナーのキーとして引き続き使用できますか?
編集 1: QMap を使用できません。std::map に固執する必要があります。
編集 2: QPointer を使用すると、コードがコンパイルされます。問題は、実行時に不愉快な驚きを期待すべきかどうかです。
c++ - 抽象基本クラスの QPointer
式解析ライブラリを作成しています。これは Qt で書かれており、私は次のようなクラス構造を持っています:
QCExpressionNode
-式のすべての部分の抽象基底クラス -式の
QCConstantNode
定数 (extends QCExpressionNode
)
QCVariableNode
-式の変数 (extends QCExpressionNode
)
QCBinaryOperatorNode
-2 進数の加算、減算、乗算、除算および電力事業者 (延長QCExpressionNode
)
QPointer
スマート ポインター (や など)を使用できるようにしたいのQSharedPointer
ですが、次の課題に直面しています。 - 抽象クラスで使用
できますか? QPointer
もしそうなら、例を挙げてください。-具体的なサブクラス
にキャストする方法は?QPointer
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();
まだ間違っているということです。
マルチスレッドプログラムの経験がありません。どんな助けでも大歓迎です。;)
c++ - 派生オブジェクトを含む QPointer は、ベースクラスと一致しません
変なタイトルですみません、思いついたらもっといいタイトルを考えてください。
これが私の問題です。
次のような構造があります。
QObject -> MyBase -> MyDerived
次に、派生型のいずれかを QPointer として受け取る関数があります。
QPointer<MyDerived>
問題は、この関数に渡すことができないことです。これは、標準のポインターを使用した場合です。関数に適合させるために、このオブジェクトをキャストする必要がありますか? それとも、通常のポインターを使用する必要がありますか?
また、失敗したオブジェクトを割り当てるときの標準的な動作を知っている人はいますか? これを常にtryブロックで行うか、何かでラップしてnullかどうかを確認する必要がありますか? Qtのドキュメントを読んだところ、割り当てに失敗した場合、ほとんどのクラスがnull値を返すとのことでした。try-catch を使用したくない場合はどうすればよいですか?
qt - QHashへのQPointer
QPointerをQHashで使用することは可能ですか?
qt - オブジェクトメソッドにアクセスするための QPointer
QPointer
関連していない別のオブジェクトからオブジェクトメソッドにアクセスするために使用すると、奇妙な問題が発生します。
よりよく説明するために、小さな例を用意しました。
QWidget
シンプルに Widget_A と Widget_B の2 つを作成しましたQDialog
。
Widget_B から Widget_A の public メソッドにアクセスする必要があります。割り当てのために、widget_a のポインターを widget_b のメソッドに渡しましQPointer
た。Widget_A には、QLineEdit
Widget_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