gpt4 book ai didi

design-patterns - 设置 parent 的状态栏文本?

转载 作者:行者123 更新时间:2023-12-04 06:58:57 25 4
gpt4 key购买 nike

我可以用我写的这个函数设置 parent 的状态栏文本

void EditorWindow::setStatusBarText(const QString& text) {
statusBar()->showMessage(text);
}

像这样叫(来自 child )
((EditorWindow*) parent())->setStatusBarText(tr("%1, %2").arg(mousePos.x(), 0, 'f', 2).arg(mousePos.y(), 0, 'f', 2));

但我很确定这违反了一些设计原则。例如,如果 parent()不是 EditorWindow* ?

那么有什么解决方法呢?强制用户传递对 EditorWindow 的引用创建时以确保父级是正确的类型?

最佳答案

使用信号和槽;

制作 EditorWindow::setStatusBarText一个插槽。当 child 想要改变状态时给它一个信号,并将其连接到 setStatusBarText投币口。

// make setStatusBarText a slot...
class EditorWindow : public QWidget {
Q_OBJECT
...
public slots:
void setStatusBarText(const QString&);
}

// make a signal to be emitted when status should change:
class SomeChildWidget : public QWidget {
Q_OBJECT
...
signals:
void statusEvent(const QString&);
}

// connect them up when appropriate
EditorWindow::EditorWindow()
: QWidget()
{
...
m_childWidget = new SomeChildWidget(this);
connect(m_childWidget, SIGNAL(statusEvent(QString)),
this, SLOT(setStatusBarText(QString)));
...
}

那么 child 会 emit statusEvent(somestring)什么时候应该更新状态。

这可以很好地扩展,您可以拥有任意数量的子小部件,并且可以更改状态文本,它们对其父小部件一无所知,并且您可以在父小部件中实现接受或拒绝状态更新的策略来自子小部件。

关于design-patterns - 设置 parent 的状态栏文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com