我想把槽(slot)作为参数传给一个函数,在函数中再用 connect 与信号绑定。
不知怎么定义槽的类型。
参照QObject中的写法,定义了 Func2
template <typename Func1, typename Func2>
编译通过,链接失败。
------解决方案--------------------
看这个函数声明:第二个参数是obj,第三个是槽。
void singleShot ( int msec, QObject * receiver, const char * member )
------解决方案--------------------
slot 的话,是 字符串 或者是 QMetaMethod
------解决方案--------------------
看错源码了,SLOT这个宏把按一定规则根据函数名生成一个字符串,那你用字符串不行?
void MainWindow::bind(const char* aSlot)
{
connect(this, SIGNAL(iconSizeChanged(QSize)), aSlot);
}
.....
bind(SLOT(onIconSizeChanged(const QSize&)));
不过qt5之前对这个没有类型检查,所以错误的slot只会在运行时才有提示。我觉得这样使用不好。qt5后connect有新的重载支持函数指针,会在编译期进行检查了。
------解决方案--------------------
我写的一个小例子 希望能帮到你。。。
A.cpp
void A::showWait()
{
QDeclarativeView w= new QDeclarativeView();
WaitDialog myWait = new WaitDialog(w,this,SLOT(dosomething()));
}
void A::dosomething()
{
}
WaitDialog.cpp
WaitDialog::WaitDialog(QDeclarativeView * view, QObject * parentDialog, const char * onDialogShownSlot) :
QObject(parentDialog)
{
connect(this, SIGNAL(signal()), parentDialog, onDialogShownSlot, Qt::QueuedConnection);
}