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