Qt for Qt:如何连接到具有新信号/插槽风格的信号?

Posted

技术标签:

【中文标题】Qt for Qt:如何连接到具有新信号/插槽风格的信号?【英文标题】:Qwt for Qt: How to connect to signal with new signal/slot flavour? 【发布时间】:2014-06-03 08:49:52 【问题描述】:

我想连接到已选中的图例标签 SIGNAL。使用 Qts 旧 Signal/Slot-Syntax 一切都很完美,但我想使用新连接来启用编译时检查?关于如何通过新的 Signal/Slot-Syntax 连接它的任何想法?

这是我的代码:

connect( m_plotLegend, SIGNAL( checked( const QVariant &, bool, int ) ), SLOT(legendChecked( const QVariant &, bool ) ) );
//connect(m_plotLegend, &QwtLegend::checked, this, &MeasurePlot::legendChecked);

使用旧语法一切都很好,使用新语法永远无法到达插槽。有任何想法吗?非常感谢!

【问题讨论】:

你检查connect()函数调用的返回值了吗? 是的。没有成功。错误信息:QObject::connect: signal not found in QwtLegend 无论您的问题是什么 - 它应该与 Qwt 无关。该消息来自 qobject.cpp 中的 QObject::connectImpl ,使用调试器时,您应该能够找出在您的情况下为什么 senderMetaObject 是 nullptr。 【参考方案1】:

似乎5年后,情况仍然如此。旧的 SIGNAL/SLOT 语法适用于 Qwt 信号/插槽,但新语法不适用。你会得到“QObject::connect: signal not found in [Qwt ClassName]”。

作为参考,我目前使用的是 Qwt 6.1.2 和 Qt 5.9.6。

【讨论】:

【参考方案2】:

您的连接应该可以工作。

我用您的示例代码对此进行了测试,它工作正常:

定义:

...
private slots:
void test(const QVariant &, bool);

signals:
void checked( const QVariant &, bool, int );
...

连接:

...
connect(this, &TestClass::checked, this,  &TestClass::test);

emit checked(QVariant(QString("test")), true, 1);
...

插槽:

void TestClass::test(const QVariant &, bool)

...

希望能有所帮助。

【讨论】:

嗨!感谢您的帮助。当然,如果您连接到同一类的信号,它会起作用。但是尝试Qwt,你会得到错误信息QObject::connect: signal not found in QwtLegend。

以上是关于Qt for Qt:如何连接到具有新信号/插槽风格的信号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中将插槽连接到信号 QProcess::started()?

QT:使用移动语义将信号连接到插槽

Qt将信号连接到插槽

如何将信号连接到插槽

QT将不同类的信号和插槽连接到主窗口类?

Qt Connect 无法连接到插槽