【问题标题】:Using Enums in Qt slots在 Qt 插槽中使用枚举
【发布时间】:2017-06-22 16:29:39
【问题描述】:

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

#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)

错误

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

【问题讨论】:

  • 建议的答案是否解决了问题?谢谢。

标签: qt enums slots


【解决方案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 类型的函数参数的名称。也许您这样做是因为它们是枚举,但我建议您不要这样做,因为稍后在代码中它们似乎是实际的枚举值,而不是变量名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多