我现在已经提出了一些关于程序中一个主要问题的所有问题,但仍然没有解决它,我使用线程来阻止我的UI锁定,但基本上它仍然可以,因为显然你可以在线程中做UI内容。
所以我被告知使用自定义信号和插槽(不是给出任何示例)。
所以从我读过的文档中我得出了这段代码:
·H
signals:
void paint_signal(double x, double y);
的.cpp
connect(this,SIGNAL(paint_signal(double x, double y)), this, SLOT(PaintSomething(x,y)));
Paintsomething函数与所有这些函数在同一个类中....
主题:
*future2 = QtConcurrent::run(this, &GUI::paintAll);
paint all发出paint_signal并传递2个双打
emit paint_signal(x, y);
但是我得到了这个我根本不理解的错误
connect: No such signal GUI::paint_signal(double x, double y)
答案 0 :(得分:4)
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(x,y)));
删除参数名称,它应该有效。如果这个不起作用,那么这个:
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(double,double)));
请告诉我这是否适合您:)
<强>更新强>
这个想法是你不能在线程中使用UI,而是从线程向UI发出信号。因为这个答案可能会让你回到起点(可能是一个新问题),这里是一个如何从线程发出信号的工作示例:
答案 1 :(得分:1)
Floris Velleman的答案是肯定的,但是通过使用new signal slot syntax,您可以在编译期间捕获错误并摆脱冗余的限制。
旧语法:
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(double,double)));
新语法:
connect(this,
&SenderClass::paint_signal,
this,
&ReceiverClass::PaintSomething);