Использование Enums в слотах Qt

В классе 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)

ОШИБКА

/Users/konstantin/Desktop/SVMGLEP/signalviewerdialog.cpp:72: ошибка: ссылка на тип 'const QCPScatterStyle' не может привязаться к lvalue типа 'QCPScatterStyle::ScatterProperty' ui.widgetGraph->graph()->setScatterStyle(ScatterProp); ^~~~~~~~~~~

1 ответ

Решение

Это не имеет ничего общего с проблемой передачи перечислений в сигнальном соединении, где вам нужно зарегистрировать перечисление в системе метатипов Qt. Это простое несоответствие типов в простом C++.

Цитировать ссылку:

Указание стиля разброса

Вы можете установить все эти конфигурации, вызвав соответствующие функции в экземпляре:

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, Может быть, вы делаете это, потому что они являются перечислениями, но я бы посоветовал снова не делать этого, так как позже в коде они представляются фактическими значениями перечисления, а не именами переменных.

Другие вопросы по тегам