当前位置: 代码迷 >> QT开发 >> 小弟我想把槽(slot)作为参数传给一个函数,不知如何定义类型
  详细解决方案

小弟我想把槽(slot)作为参数传给一个函数,不知如何定义类型

热度:246   发布时间:2016-04-25 04:05:18.0
我想把槽(slot)作为参数传给一个函数,不知怎么定义类型。
我想把槽(slot)作为参数传给一个函数,在函数中再用 connect 与信号绑定。

不知怎么定义槽的类型。

参照QObject中的写法,定义了 Func2
template <typename Func1, typename Func2>

编译通过,链接失败。

------解决方案--------------------
看这个函数声明:第二个参数是obj,第三个是槽。
void singleShot ( int msec, QObject * receiver, const char * member )

------解决方案--------------------
slot 的话,是 字符串 或者是 QMetaMethod
------解决方案--------------------
引用:
看这个函数声明:第二个参数是obj,第三个是槽。
void singleShot ( int msec, QObject * receiver, const char * member )



看错源码了,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);

}
  相关解决方案