【发布时间】:2017-08-30 15:26:53
【问题描述】:
我有一个 C++ 类,它定义了一个方法,该方法有一个 sol(指向成员方法的指针)作为参数:
MyClass : public QDialog, private Ui::MyClassBase
{
Q_OBJECT
public:
MyClass( QWidget *parent = nullptr );
void connectValueChanged( const QList<QWidget *> &widgets, void ( MyClass::*slot )() );
}
和
void MyClass::connectValueChanged( const QList<QWidget *> &widgets, void ( MyClass::*slot )() )
{
Q_FOREACH ( QWidget *widget, widgets )
{
connect( w, &QWidget::signal, this, slot );
}
}
connectValueChanged 不能按照 SIP 文件中的定义使用,我收到 语法错误。
我也尝试使用const char *slot,但没有成功:
在 SIP 文件中
void MyClass::connectValueChanged( const QList<QWidget *> &widgets, const char *slot);
我收到一个错误 (no matching function for call to ‘MyClass::connectValueChanged),因为我想我需要一些 MethodCode 来实现这一点。
也许有一些提示:
- existing Qt method 但使用旧的信号/插槽连接。
- SIP extension API 要么。
-
static QMetaObject::fromSignal(返回QMetaObject)header 和 definition
如何在 SIP 中定义一个以槽为参数的方法?
我认为这需要一些MethodCode 我目前无法编写。
我想使用Qt5新的信号/插槽连接(避免在cpp方法中使用const char *slot,可能在python方法中使用一些MethodCode)
【问题讨论】:
-
你得到什么错误?你怎么打电话给
connectValueChanged? -
我刚刚用错误更新了问题。
-
你能显示你调用函数的实际代码吗?
-
您可能以错误的方式调用该函数,请查看我的示例并展示您的不同之处。
标签: c++ pyqt qt5 signals-slots python-sip