我试着这样做:
connect(this, SIGNAL(signalClicked(int&)), classA, SLOT(doWork(int&)));
字符串
但我从标题中得到了信息。所以我在互联网上探索了一下,我想出了这个解决方案,它也不起作用:
qRegisterMetaType<int&>("Type");
connect(this, SIGNAL(signalClicked(Type)), classA, SLOT(doWork(Type)));
型
错误:没有匹配的函数用于调用“qRegisterMetaType(const char[5])”
有什么办法吗?
2条答案
按热度按时间ggazkfy81#
如果Qt试图将参数排队,这意味着连接是在线程之间进行的。这对非常量引用无效。
你可以使用reference_wrapper来解决这个问题,但我强烈建议你重新考虑你的设计,在信号/插槽连接中通过引用传递值不是一个好主意。
b0zn9rqh2#
我希望能够用
std::shared_ptr<>
连接一个事件。我所做的就是用那个指针创建一个结构,这个结构就是我声明和发送事件的结构。所以我有一个这样的对象:
字符串
我需要调用
Q_DECLARE_METATYPE()
来传递智能指针。所以我的第一个想法是:型
这根本不起作用。所以我必须做的是用那个指针创建一个结构,并在命名空间之外创建它(上面的
builder
):型
然后在我的主类(a
QWindow
)中,我有一个函数来发出信号,实际的信号和一个槽来处理消息:型
正如我们所看到的,类可以包含任何你想要的东西(几乎),但是类型是由复制使用的(没有引用,没有指针)。
为了发出事件,我调用了
project_changed()
函数,该函数创建了一个带有项目指针的project_ptr
,并使用Qt的emit ...
特性发送。型
最后,你必须像这样连接这个事件,我在我的构造函数中这样做:
型
我觉得它相当复杂,但这正如预期的那样。