在C#中,为了将一个信号连接到插槽(委托给方法),我所要做的就是:
first.signal += second.slot但在Qt中是这样的:
connect( & first, SIGNAL( signal( int, int, QString ) ), & second, SLOT( slot( int, int, QSTring ) ) );而这一条是短的,通常它们产卵2-3条线。当然,我完全理解Qt只模拟.h文件,而对于.cpp,它们被绑定到标准语法,但是有什么技巧/方法可以使信号槽连接更短一点吗?我知道如何通过给信号指定特殊名称来自动将信号连接到插槽,但这只适用于.ui文件中的信号。有什么提示吗?
发布于 2009-12-27 06:28:03
一个技巧是使用QtCreator作为编辑器,因为它允许您在键入时从下拉列表中选择信号和插槽。
一个看似不相关的反映是,Qt努力拥有一个相当冗长的API,因为它更容易阅读(在编写时也更容易记住)。因此,他们避免缩写,写下它们的意思: QAbstractItemModel,setWindowTitle等。而不是QAbstItModel,setWinTit等。更多的键入,更少的误解和链接错误(缺少符号)
发布于 2009-12-27 05:52:54
通过为信号指定特殊名称,我知道如何将信号自动连接到插槽,但这只适用于.ui文件中的信号
这种方法可以在.ui文件之外使用,您可以随心所欲地调用QMetaObject::connectSlotsByName。
发布于 2009-12-26 19:13:30
如果您发现这些内容冗长且重复,您可以使用宏来简化语法。例如:
#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)缺点是,除非您仔细选择宏,否则您的代码将失去对其他人的可读性。
https://stackoverflow.com/questions/1963090
复制相似问题