223 lines
5.7 KiB
C++
223 lines
5.7 KiB
C++
#include "opcv/CvGraphicsShowModel.h"
|
|
|
|
|
|
CvGraphicsShowModel::CvGraphicsShowModel()
|
|
{
|
|
//mCvImageView = new CvImageViewWidget();
|
|
//mCvImageView->installEventFilter(this);
|
|
//mCvImageView->resize(600, 450);
|
|
//moveToThread(this);
|
|
|
|
mCvGraphicsView = new CvGraphicsViewWidget();
|
|
mCvGraphicsView->setObjectName(QStringLiteral("graphicsView"));
|
|
mCvGraphicsView->setStyleSheet(
|
|
"QGraphicsView#graphicsView{ "
|
|
"background-color:transparent; "
|
|
"border: 1px solid #F0F2F4; "
|
|
"border-radius: 4px; }");
|
|
|
|
widget = new QWidget();
|
|
widget->resize(600, 450);
|
|
widget->setObjectName(QStringLiteral("widget"));
|
|
widget->setStyleSheet("QWidget#widget { background-color:transparent; }");
|
|
|
|
QGridLayout* gridLayout = new QGridLayout(widget);
|
|
QVBoxLayout* verticalLayout = new QVBoxLayout();
|
|
QHBoxLayout* horizontalLayout = new QHBoxLayout();
|
|
horizontalLayout->setDirection(QHBoxLayout::LeftToRight);
|
|
|
|
QLabel* label = new QLabel();
|
|
label->setObjectName(QStringLiteral("label"));
|
|
label->setText(QStringLiteral("ͼƬ·ÅËõ:"));
|
|
label->setStyleSheet("QLabel#label { color:#FFFFFF; }");
|
|
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
sizePolicy.setHorizontalStretch(0);
|
|
sizePolicy.setVerticalStretch(0);
|
|
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
|
|
label->setSizePolicy(sizePolicy);
|
|
label->setMaximumSize(QSize(60, 16777215));
|
|
|
|
horizontalSlider = new QSlider();
|
|
horizontalSlider->setObjectName(QString::fromUtf8("horizontalSlider"));
|
|
horizontalSlider->setMinimum(-14);
|
|
horizontalSlider->setMaximum(14);
|
|
horizontalSlider->setPageStep(2);
|
|
horizontalSlider->setOrientation(Qt::Horizontal);
|
|
horizontalSlider->setTickPosition(QSlider::TicksBelow);
|
|
QObject::connect(horizontalSlider, &QSlider::valueChanged, this, &CvGraphicsShowModel::onQSliderValueChanged);
|
|
|
|
QSpacerItem* horizontalSpacer = new QSpacerItem(15, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
|
|
horizontalLayout->addItem(horizontalSpacer);
|
|
|
|
horizontalLayout->addWidget(label);
|
|
horizontalLayout->addWidget(horizontalSlider);
|
|
|
|
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
|
horizontalLayout->addItem(horizontalSpacer);
|
|
|
|
verticalLayout->addLayout(horizontalLayout);
|
|
verticalLayout->addWidget(mCvGraphicsView);
|
|
|
|
gridLayout->addLayout(verticalLayout, 0, 0, 1, 1);
|
|
|
|
mCvImageData = std::make_shared<CvImageData>();
|
|
}
|
|
|
|
void CvGraphicsShowModel::onQSliderValueChanged(int val)
|
|
{
|
|
qDebug() << "onQSliderValueChanged:" << val;
|
|
qreal scale = 1.0;
|
|
if (val > 0)
|
|
{
|
|
scale = qPow(1.2, val);
|
|
qreal temp = scale;
|
|
scale = scale / mScaledNum;
|
|
mScaledNum = temp;//¸üб£´æµÄËõ·ÅϵÊý
|
|
}
|
|
else if (val < 0)
|
|
{
|
|
scale = qPow(1.2, val);
|
|
qreal temp = scale;
|
|
scale = scale / mScaledNum;
|
|
mScaledNum = temp;//¸üб£´æµÄËõ·ÅϵÊý
|
|
}
|
|
else if (val == 0)
|
|
{
|
|
qreal temp = scale;
|
|
scale = scale / mScaledNum;
|
|
mScaledNum = temp;//¸üб£´æµÄËõ·ÅϵÊý
|
|
}
|
|
mCvGraphicsView->scale(scale, scale);
|
|
}
|
|
|
|
void CvGraphicsShowModel::inputConnectionDeleted(QtNodes::Connection const&)
|
|
{
|
|
mCvGraphicsView->setScene(new QGraphicsScene());
|
|
|
|
mCvImageData = std::make_shared<CvImageData>();
|
|
|
|
PortIndex const outPortIndex = 0;
|
|
modelValidationState = NodeValidationState::Warning;
|
|
modelValidationError = QStringLiteral("ͼƬÊäÈëδÁ¬½Ó!");
|
|
Q_EMIT dataUpdated(outPortIndex);
|
|
}
|
|
|
|
unsigned int CvGraphicsShowModel::nPorts(PortType portType) const
|
|
{
|
|
unsigned int result = 1;
|
|
|
|
switch (portType)
|
|
{
|
|
case PortType::In:
|
|
result = 1;
|
|
break;
|
|
|
|
case PortType::Out:
|
|
result = 1;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
NodeDataType CvGraphicsShowModel::dataType(PortType portType, PortIndex portIndex) const
|
|
{
|
|
switch (portIndex)
|
|
{
|
|
case 0:
|
|
return CvImageData().type();
|
|
break;
|
|
case 1:
|
|
return CvImageData().type();
|
|
break;
|
|
}
|
|
return CvImageData().type();
|
|
}
|
|
|
|
bool CvGraphicsShowModel::RunTask()
|
|
{
|
|
PortIndex const outPortIndex = 0;
|
|
try
|
|
{
|
|
//qDebug() << "11show";
|
|
//QThread::sleep(3);
|
|
//QThread* thread = new QThread();
|
|
//qDebug() << "CvGraphicsShowModel::RunTask thread:" << thread->currentThreadId();
|
|
|
|
mCvGraphicsView->showImage(*mCvImageData->CvImage());
|
|
mCvGraphicsView->scale(0.85, 0.85);
|
|
modelValidationState = NodeValidationState::Valid;
|
|
modelValidationError = QString();
|
|
}
|
|
catch (...)
|
|
{
|
|
modelValidationState = NodeValidationState::Warning;
|
|
modelValidationError = QStringLiteral("ȱʧ»òÔËÐÐʧ°Ü!");
|
|
}
|
|
|
|
Q_EMIT dataUpdated(outPortIndex);
|
|
|
|
return true;
|
|
}
|
|
|
|
void CvGraphicsShowModel::setInData(std::shared_ptr<NodeData>data, int)
|
|
{
|
|
if (data == nullptr)
|
|
return;
|
|
if (data->type() == mCvImageData->type())
|
|
{
|
|
auto dataPtr = std::dynamic_pointer_cast<CvImageData>(data);
|
|
if (dataPtr->CvImage()->empty())
|
|
return;
|
|
mCvImageData->setCvImage(*dataPtr->CvImage());
|
|
}
|
|
RunTask();
|
|
}
|
|
|
|
bool CvGraphicsShowModel::eventFilter(QObject* object, QEvent* event)
|
|
{
|
|
if (event->type() == QEvent::Wheel)
|
|
{
|
|
|
|
}
|
|
//if (object == mCvGraphicsView->viewport())
|
|
//{
|
|
// qDebug() << event->type();
|
|
// if (event->type() == QEvent::Wheel || event->type() == QEvent::GraphicsSceneWheel)
|
|
// {
|
|
// QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
|
|
// qreal qrTmp = 1.0;
|
|
// if (mScaledFactor < 0.01 || mScaledFactor > 2000)
|
|
// return false;
|
|
// if (wheelEvent->delta() > 0)
|
|
// {
|
|
// qrTmp = 1.2;
|
|
// mCvGraphicsView->scale(qrTmp, qrTmp);
|
|
// }
|
|
// else
|
|
// {
|
|
// qrTmp = 1.0 / 1.2;
|
|
// mCvGraphicsView->scale(qrTmp, qrTmp);
|
|
// }
|
|
// mScaledFactor = mScaledFactor * qrTmp; //±£´æ·Å´ó±¶Êý
|
|
// qDebug() << "GraphicsSceneWheel";
|
|
// return true;
|
|
// }
|
|
//}
|
|
return false;
|
|
}
|
|
|
|
std::shared_ptr<NodeData> CvGraphicsShowModel::outData(PortIndex index)
|
|
{
|
|
switch (index)
|
|
{
|
|
case 0:
|
|
return std::dynamic_pointer_cast<CvImageData>(mCvImageData);
|
|
break;
|
|
}
|
|
return std::dynamic_pointer_cast<CvImageData>(mCvImageData);
|
|
}
|
|
|