私はこの関数で親のステータスバーのテキストを設定することができますが、私はこのように呼ばれ 親のステータスバーのテキストを設定しますか?
void EditorWindow::setStatusBarText(const QString& text) {
statusBar()->showMessage(text);
}
(子から)
((EditorWindow*) parent())->setStatusBarText(tr("%1, %2").arg(mousePos.x(), 0, 'f', 2).arg(mousePos.y(), 0, 'f', 2));
を書いたしかし、私はいくつかの設計原則を破ることかなり確信しています。たとえば、parent()
がEditorWindow*
でない場合はどうなりますか?
これはどのような回避策ですか?親が正しいタイプであることを確認するために、作成時にユーザがEditorWindow
への参照を渡すように強制するか?
ああ!私は信号/スロットについて考え始めたばかりでしたが、私はそれを頭の中で逆向きに持っていました。私は親でそれを接続することができ、それは問題を緩和する。ブリリアント!ありがとう:) – mpen
あなたは実際にsetStatusBarText関数を必要としません、あなたは直接showMessageを使用することができます:connect(editorView、SIGNAL(statusBarUpdate(QString))、statusBar()、SLOT(showMessage(QString))); – mpen
@マーク - recvは接続を許可する必要があり、スロットを持っていなければならないと考えてください。信号はどこから来ても決して存在しないか、決して使用されないかもしれません。 –