c++ 为什么qt object::connect()说没有重载函数“QDialog_subclass::connect”的示例?

6qftjkof  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(141)

在我拥有的一个类(它是QDialog的子类,父类是QWidget)的构造函数中,我试图在它的父类和它示例化的成员对象之间创建一个信号槽连接。

loadLib1::loadLib1(Qwidget* parent) : QDialog(parent)
{
   // Declare members
   ...
   m_animationFrame = new AnimationFrame(this);
   if (0 !=m_animationFrame)
   {
      connect(parent, &wndWidget::loadToggled, m_animationFrame, &AnimationFrame::slotCreateWidget);
   }
}

Visual Studio突出显示它并说:

*no instance of overloaded function "loadLib1::connect" matches the argument list
argument types are: (QWidget *, void (wndWidget::*)(), AnimationFrame *, void (AnimationFrame::*)())*

注意:wndWidget(来自QMainWindow)和AnimationFrame(来自QFrame)是类。
根据Qt文档和示例,在我看来这应该可以工作。你知道为什么不是吗?

ajsxfq5m

ajsxfq5m1#

这里

connect(parent, &wndWidget::loadToggled, m_animationFrame, &AnimationFrame::slotCreateWidget);

parent是QWidget指针。QWidget没有信号loadToggled。解决方案,更改参数类型:

loadLib1::loadLib1(wndWidget* parent) : QDialog(parent)

或者,使用qobject_castparent转换为wndWidget指针。记住检查强制转换是否成功(使用临时变量)。但是最好只改变参数类型,这样如果类型不匹配,你会得到编译错误,而不需要在运行时处理这种情况。

相关问题