在Qt插槽中使用枚举

时间:2017-06-22 16:29:39

标签: qt enums slots

在类QCustomPlot中有我想要在QWidget类的构造函数中使用的枚举,它使用类QCustomPlot。

#include "qcustomplot.h"

SignalViewerDialog::SignalViewerDialog(QVector<double> x_1,
                                       QVector<double> y_1,
                                       QCPScatterStyle::ScatterProperty ScatterProp,
                                       QCPScatterStyle::ScatterShape ScatterShp,
                                       QCPGraph::LineStyle LineSt,
                                       QWidget *parent) : QDialog(parent)

ERROR

  

/Users/konstantin/Desktop/SVMGLEP/signalviewerdialog.cpp:72:ошибка:类型'const QCPScatterStyle'的引用无法绑定到'QCPScatterStyle :: ScatterProperty'类型的左值           ui.widgetGraph-&GT;图() - &GT; setScatterStyle(ScatterProp);                                                    ^ ~~~~~~~~~~

1 个答案:

答案 0 :(得分:1)

这与在信号槽连接中传递枚举的问题无关,你需要在Qt元类型系统中注册枚举。这是普通C ++中的简单类型不匹配。

引用reference

  

指定散点图样式

     

您可以通过调用相应的设置来设置所有这些配置   实例上的函数:

QCPScatterStyle myScatter;  
myScatter.setShape(QCPScatterStyle::ssCircle);  
myScatter.setPen(QPen(Qt::blue));   myScatter.setBrush(Qt::white);  
myScatter.setSize(5);  
customPlot->graph(0)->setScatterStyle(myScatter);
     

或者您可以使用采用不同参数的各种构造函数之一   组合,可以轻松地在单个中指定散布样式   打电话,像这样:

customPlot->graph(0)->setScatterStyle(
   QCPScatterStyle(QCPScatterStyle::ssCircle, Qt::blue, Qt::white, 5)
);

您正在传递类型为QCPScatterStyle::ScatterProperty的枚举,而不是类QCPScatterStyle的对象。

编辑1:因此,您需要使用

ui.widgetGraph->graph()->setScatterStyle(QCPScatterStyle(ScatterProp));

编辑2:此外,我还要注意您使用CamelCase作为enum类型的函数参数的名称。也许你这样做是因为它们是枚举,但我建议再做一遍,因为在代码中它们似乎是实际的枚举值,而不是变量名。