2

昨日、私は Qt のプロジェクトで作業していたので、公開されていると思われるスロットに遅延呼び出しを行いました。だから私は書いた:

QTimer::singleShot();

そのスロットを呼び出しましたが、最終的にそのスロットがプライベートであることがわかりました。

これは、プライベート スロットの回避策になる可能性があります。

QTimer::singleShot(0,class,SLOT(class::privateSlot()))

Qtでの宣言にこの矛盾があるのはなぜですか?

4

1 に答える 1

2

@hate-engineの回答を少し広げました

ソースの名前とプレフィックスmoc_(例: moc_my_class.cpp) を含むファイルを見つけて確認します。Q_OBJECTこのファイルは、クラス宣言にマクロを追加したときに moc-compiler によって生成されました。このマクロは、いくつかのメソッドをクラス宣言に追加し、moc_my_class.cppそのメソッドの定義を含みます。

次に method を見てくださいMyClass::qt_metacall。このメソッドは public であるため、他の場所から呼び出すことができます。一方MyClass、クラス に属しているため、のプライベート メソッドを呼び出すことができますMyClass

謎はありません ))

于 2012-12-21T14:25:23.797 に答える