首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt "connect“语法非常长。有什么技巧可以让它变得更短吗?

Qt "connect“语法非常长。有什么技巧可以让它变得更短吗?
EN

Stack Overflow用户
提问于 2009-12-26 18:39:32
回答 7查看 901关注 0票数 1

在C#中,为了将一个信号连接到插槽(委托给方法),我所要做的就是:

代码语言:javascript
复制
first.signal += second.slot

但在Qt中是这样的:

代码语言:javascript
复制
connect( & first, SIGNAL( signal( int, int, QString ) ), & second, SLOT( slot( int, int, QSTring ) ) );

而这一条是短的,通常它们产卵2-3条线。当然,我完全理解Qt只模拟.h文件,而对于.cpp,它们被绑定到标准语法,但是有什么技巧/方法可以使信号槽连接更短一点吗?我知道如何通过给信号指定特殊名称来自动将信号连接到插槽,但这只适用于.ui文件中的信号。有什么提示吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-12-27 06:28:03

一个技巧是使用QtCreator作为编辑器,因为它允许您在键入时从下拉列表中选择信号和插槽。

一个看似不相关的反映是,Qt努力拥有一个相当冗长的API,因为它更容易阅读(在编写时也更容易记住)。因此,他们避免缩写,写下它们的意思: QAbstractItemModel,setWindowTitle等。而不是QAbstItModel,setWinTit等。更多的键入,更少的误解和链接错误(缺少符号)

票数 1
EN

Stack Overflow用户

发布于 2009-12-27 05:52:54

通过为信号指定特殊名称,我知道如何将信号自动连接到插槽,但这只适用于.ui文件中的信号

这种方法可以在.ui文件之外使用,您可以随心所欲地调用QMetaObject::connectSlotsByName

票数 6
EN

Stack Overflow用户

发布于 2009-12-26 19:13:30

如果您发现这些内容冗长且重复,您可以使用宏来简化语法。例如:

代码语言:javascript
复制
#define S_i_i(x) x(int, int, QString)
#define CONNECT(sx,x,tx,sy,y,ty) connect(&x, SIGNAL(tx(sx)), &y, SLOT(ty(sy)))

CONNECT(signal, first, S_i_i, slot, second, S_i_i)

缺点是,除非您仔细选择宏,否则您的代码将失去对其他人的可读性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1963090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档