我正在使用QCustomPlot
,我正在尝试编写一个代码,一旦用户按下鼠标并拖动它就会重新调整我的轴。我做了:
connect(ui->plot, SIGNAL(mousePress(QMouseEvent *event)), this, SLOT(mousedrag(QMouseEvent*)));
我一直在接受:
QObject :: connect:没有这样的信号QCustomPlot :: mousePress(QMouseEvent *事件)
但是mouseWheel(QWheelEvent*)
以及mouseWheel
和mousePress
都在QCustomPlot
库中声明了信号。
我哪里错了?此外,如果某人有更好的信号来触发我的功能mousedrag(QMouseEvent*)
,它会根据y1轴重新调整y2轴,我会打开建议。
答案 0 :(得分:0)
使用" old"信号/插槽连接语法,即使用SIGNAL
语句中的SLOT
和connect()
宏的语法,您不应提供参数的名称,仅他们的类型。
换句话说:
SIGNAL(mousePress(QMouseEvent *event)) // WRONG, parameter name in there!
SIGNAL(mousePress(QMouseEvent *)) // GOOD
SIGNAL(mousePress(QMouseEvent*)) // BETTER: already normalized
只需将您的陈述改为
即可connect( ui->plot, SIGNAL(mousePress(QMouseEvent*)),
this, SLOT(mousedrag(QMouseEvent*)) );
答案 1 :(得分:0)
传递给connect
的信号签名无效。参数名称不是签名的一部分。您还应删除任何空格,以便connect
不必对签名进行规范化。规范化签名没有不必要的空格,最外面的const
和引用必须被删除,例如SIGNAL(textChanged(QString))
,不 SIGNAL(textChanged(const QString &))
。
remove
vvvvv
connect(ui->plot, SIGNAL(mousePress(QMouseEvent *event)), this,
SLOT(mousedrag(QMouseEvent*)));
请改为:
// Qt 5
connect(ui->plot, &QCustomPlot::mousePress, this, &MyClass::mousedrag);
// Qt 4
connect(ui->plot, SIGNAL(mousePress(QMouseEvent*)), SLOT(mousedrag(QMouseEvent*));
TL; DR:这种API设计本质上是一个错误。
事件和信号/插槽机制是QCustomPlot
设计混合在一起的不同范例。连接到这些信号的插槽只能以非常具体和有限的方式使用。您必须完全使用它们,就好像它们是派生类中的重载一样。这意味着:
每个信号必须连接0或1个插槽。
连接必须是直接或自动连接到同一线程中的对象。
您不能使用排队连接:当控件返回事件循环时,事件已被破坏,插槽/仿函数将使用悬空指针。