我有一个小部件(mainWidget)和另一个小部件(childWidget),这是它的一个孩子。
我想:
connect(childWidget, SIGNAL(somethingHappened(...)), mainWidget, SLOT(handleIt(...));
我的问题是:是否将connect语句放在mainWidget或childWidget中?
如果我在mainWidget的构造函数和地方创建childWidget 它的工作原理是下一行的连接语句。但是,让我们说吧 childWidget在创建时会执行某些操作然后发出信号 mainWidget成功。你可能有连接的情况 语句只出现在发出的函数(childWidget)之后 信号。
如果我将connect语句放在childWidget的构造函数中,
问题是它对父母的任何事情都不了解
插槽。如果我让childWidget继承mainWidget,它确实知道了
插槽 - 但这对我来说感觉不好。无法得到它
无论如何要工作。可能有一个正确的方法来做到这一点 - 我还是
找。
我对Qt编程很新。 提前:谢谢你的帮助。
答案 0 :(得分:1)
你应该设计好你的代码,以避免神秘错误的蔓延。在主窗口小部件中编写连接是一个更好的主意,理想情况下,子窗口小部件的构造函数中不应该有一个emit。可能你可以将emit代码移出到另一个块并在构造完成后进行调用。从'mainWidget'对'childwidget'进行子类化只是为了访问它的插槽看起来像一个不灵活的设计。设计应该是这样的,如果任何类知道你的类发出的信号,另一个类应该能够灵活地连接到它。
答案 1 :(得分:1)
在创建子项的类中构造对象后,我总是执行connect调用。原因很简单:创建孩子的对象知道孩子有什么信号/插槽以及它的目的需要什么,但孩子不能和更多的重要性不应该知道。如果孩子对其父母的期望超过必要,则会限制代码的可重用性。
你是对的,任何人都不会听到施工人员的信号。只是不要在构造函数中使用信号,就像在构造函数中不应该使用虚函数一样。如果必须在初始化时发出信号,请编写一个单独的ini
函数,并在connect
之后调用它。
您还可以使用qobject_cast
来确定运行时父级的类型,但这只是糟糕的设计。