Qt QObject::connect有趣的重载形式
【摘要】 Qt QObject::connect有趣的重载形式一般可以这么写QLabel *label = new QLabel;QScrollBar *scrollBar = new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));还可以这么写QObject::...
Qt QObject::connect有趣的重载形式
- 一般可以这么写
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
- 还可以这么写
QObject::connect(scrollBar, &QScrollBar::valueChanged, label, &QLabel::setNum);
都知道SIGNAL、SLOT是两个宏,一直没注意两种形式的重载函数的差异,直到有一天需要从动态库里添加对已有的信号新增槽函数连接,
没有发送者的类型声明只有基类指针,这时候怎么连接呢,这时候翻看connect重载的时候发现原来
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Q_CORE_EXPORT const char *qFlagLocation(const char *method);
#ifndef QT_NO_DEBUG
# define QLOCATION "\0" __FILE__ ":" QTOSTRING(__LINE__)
# define SLOT(a) qFlagLocation("1"#a QLOCATION)
# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)
#else
# define SLOT(a) "1"#a
# define SIGNAL(a) "2"#a
#endif
所以我们可以写出下面这种看起来怪怪的代码
connect(pMain, "2testFinishSignal(bool)", this,SLOT(testFinish(bool)));
有趣
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)