插槽(指向方法成员的指针)作为 SIP 中方法的参数
Slot (pointer to method member) as argument to method in SIP
我有一个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
来实现这一点。
也许一些提示:
- 现有的Qt方法但使用旧的信号/插槽连接。
- SIP 扩展 API 要么。
-
static QMetaObject::fromSignal
(返回QMetaObject
(标头和定义
我该怎么做才能在 SIP 中定义一个带有插槽作为参数的方法?
我认为这需要一些MethodCode
我现在无法写。我想使用 Qt5 新信号/插槽连接(避免在 cpp 方法中使用 const char *slot
,可能放在 python 方法中,并带有一些MethodCode
(
我已经删除了指向成员的指针,因为我不确定目前是否支持它。如果您使用 const char*
信号/时隙方法,您还需要实现这样的方法,否则您当然会得到不匹配错误。
class MyQObj : public QObject {
Q_OBJECT
public:
MyQObj(QObject * parent = nullptr);
void connectValueChanged(const QList<QObject*> &objects, const char * slot);
public slots:
void mySlot();
};
...
MyQObj::MyQObj(QObject * parent) : QObject(parent) {}
void MyQObj::connectValueChanged(const QList<QObject*> &objects, const char * slot) {
for (auto p : objects)
QObject::connect(p, SIGNAL(objectNameChanged(QString)), this, slot);
}
void MyQObj::mySlot() {
std::cout << "Called slotn";
}
...
int main(int argc, char ** argv) {
QCoreApplication app(argc, argv);
MyQObj obj(&app);
QObject xxx(&app);
QList<QObject*> list;
list.push_back(&xxx);
obj.connectValueChanged(list, SLOT(mySlot()));
QTimer::singleShot(1000, [&xxx](){
xxx.setObjectName("newname");
});
return app.exec();
}
SIP 文件可能如下所示:
%Module A
%Import QtCore/QtCoremod.sip
class MyQObj : public QObject
{
public:
MyQObj(QObject * parent /TransferThis/ = nullptr);
void connectValueChanged(const QList<QObject*> &objects, const char* slot);
public slots:
void mySlot();
};
相关文章:
- 友元方法作为常量
- 混淆 Begin() 方法作为参数
- 将方法作为参数发送
- 将方法作为模板化参数传递 C++11
- 使用类中的方法作为运算符将值分配给类的私有成员
- 将C 方法作为功能指针传递
- 将指针类方法作为参数传递给其他类方法C
- C#将方法作为参数
- 将类实例和方法作为参数传递给C 中的另一个函数
- 如何在我的源代码中找到所有发生的情况,其中std :: string被传递给方法作为副本而不是恒定引用
- 一个类的方法作为回调
- 在用户类中包括PYBIND11嵌入式模块的正确方法(作为Singleton类的一部分)是什么?
- 如何将模板方法作为模板参数传递
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- 将typedef方法作为指针函数传递
- 方法作为方法的默认参数
- C 通过类方法作为参数
- 当使用实例会员方法作为函数指针时,堆积损坏
- 如何在 C++11/14 中将类方法作为参数传递
- c++将类方法作为参数传递给具有模板的类方法