首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

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

2013-03-01 
我想把槽(slot)作为参数传给一个函数,不知怎么定义类型。我想把槽(slot)作为参数传给一个函数,在函数中再用

我想把槽(slot)作为参数传给一个函数,不知怎么定义类型。
我想把槽(slot)作为参数传给一个函数,在函数中再用 connect 与信号绑定。

不知怎么定义槽的类型。

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

编译通过,链接失败。
看错源码了,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);

}

热点排行