我想把槽(slot)作为参数传给一个函数,不知怎么定义类型。

Jonix 2013-01-21 11:56:23
我想把槽(slot)作为参数传给一个函数,在函数中再用 connect 与信号绑定。

不知怎么定义槽的类型。

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

编译通过,链接失败。
...全文
381 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenKwan 2013-01-22
  • 打赏
  • 举报
回复
引用 2 楼 jdwx1 的回复:
看这个函数声明:第二个参数是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有新的重载支持函数指针,会在编译期进行检查了。
soenkiyou 2013-01-22
  • 打赏
  • 举报
回复
我写的一个小例子 希望能帮到你。。。 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); }
dext 2013-01-21
  • 打赏
  • 举报
回复
slot 的话,是 字符串 或者是 QMetaMethod
jdwx 2013-01-21
  • 打赏
  • 举报
回复
看这个函数声明:第二个参数是obj,第三个是槽。 void singleShot ( int msec, QObject * receiver, const char * member )
BenKwan 2013-01-21
  • 打赏
  • 举报
回复
slot其实就是个函数指针吧,你声明相应的函数指针传进去不行?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧