还剩信号连接
This commit is contained in:
@@ -107,6 +107,7 @@ public:
|
||||
m_image = pixmap.copy();
|
||||
initShow();
|
||||
}
|
||||
|
||||
void resetImage()
|
||||
{
|
||||
if (m_image.isNull())
|
||||
@@ -244,10 +245,84 @@ protected:
|
||||
}
|
||||
|
||||
private:
|
||||
void showimg(cv::Mat& img)
|
||||
{
|
||||
scene->clear();
|
||||
// 加载图像
|
||||
cv::Mat matForQimg;
|
||||
cvtColor(img, matForQimg, cv::COLOR_BGR2RGB);
|
||||
QImage disImage = QImage((const unsigned char*)(matForQimg.data), matForQimg.cols, matForQimg.rows, QImage::Format_RGB888);
|
||||
QPixmap pixmap = QPixmap::fromImage(disImage);
|
||||
if (pixmap.isNull()) {
|
||||
return;
|
||||
}
|
||||
auto item = scene->addPixmap(pixmap);
|
||||
setSceneRect(pixmap.rect());
|
||||
|
||||
// 自适应缩放
|
||||
fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
|
||||
// 设置视图
|
||||
//setFixedSize(640, 480);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setMouseTracking(true);
|
||||
if (rectGroup != nullptr)
|
||||
delete rectGroup;
|
||||
rectGroup = new QGraphicsItemGroup();
|
||||
scene->addItem(rectGroup);
|
||||
}
|
||||
void showimg(QImage& img)
|
||||
{
|
||||
scene->clear();
|
||||
// 加载图像
|
||||
QPixmap pixmap = QPixmap::fromImage(img);
|
||||
if (pixmap.isNull()) {
|
||||
return;
|
||||
}
|
||||
auto item = scene->addPixmap(pixmap);
|
||||
setSceneRect(pixmap.rect());
|
||||
|
||||
// 自适应缩放
|
||||
fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
|
||||
// 设置视图
|
||||
//setFixedSize(640, 480);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setMouseTracking(true);
|
||||
if (rectGroup != nullptr)
|
||||
delete rectGroup;
|
||||
rectGroup = new QGraphicsItemGroup();
|
||||
scene->addItem(rectGroup);
|
||||
}
|
||||
void showimg(QPixmap& img)
|
||||
{
|
||||
scene->clear();
|
||||
// 加载图像
|
||||
if (img.isNull()) {
|
||||
return;
|
||||
}
|
||||
auto item = scene->addPixmap(img);
|
||||
setSceneRect(img.rect());
|
||||
|
||||
// 自适应缩放
|
||||
fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
|
||||
// 设置视图
|
||||
//setFixedSize(640, 480);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setMouseTracking(true);
|
||||
if (rectGroup != nullptr)
|
||||
delete rectGroup;
|
||||
rectGroup = new QGraphicsItemGroup();
|
||||
scene->addItem(rectGroup);
|
||||
}
|
||||
QPixmap m_image;
|
||||
bool m_isPan;
|
||||
QPoint m_prevPan;
|
||||
|
||||
QGraphicsItemGroup* rectGroup = nullptr;
|
||||
|
||||
};
|
||||
class ImageWidget : public QWidget {
|
||||
@@ -311,22 +386,59 @@ public:
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(this, &QWidget::customContextMenuRequested, this, &ImageWidget::showContextMenu);
|
||||
}
|
||||
void setLabelText(const QString& text) {
|
||||
void setTitle(const QString& text) {
|
||||
label->setText(text);
|
||||
}
|
||||
void showOriImg(cv::Mat oriImgInput)
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setOriImg(cv::Mat oriImgInput)
|
||||
{
|
||||
if (oriImgInput.empty()) {
|
||||
return;
|
||||
}
|
||||
pixOriImg = QPixmap::fromImage(cvMatToQImage(oriImgInput).rgbSwapped());
|
||||
if (pixOriImg.isNull()) {
|
||||
return;
|
||||
}
|
||||
oriImg= oriImgInput;
|
||||
if (MatType == false)
|
||||
setImageFromMat(oriImgInput);
|
||||
showImg(pixOriImg);
|
||||
}
|
||||
void showResImg(cv::Mat resImgInput)
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setResImg(cv::Mat resImgInput)
|
||||
{
|
||||
resImg= resImgInput;
|
||||
if (resImgInput.empty()) {
|
||||
return;
|
||||
}
|
||||
pixResImg = QPixmap::fromImage(cvMatToQImage(resImgInput).rgbSwapped());
|
||||
if (pixResImg.isNull()) {
|
||||
return;
|
||||
}
|
||||
resImg = resImgInput;
|
||||
if (MatType == true)
|
||||
setImageFromMat(resImg);
|
||||
showImg(pixResImg);
|
||||
}
|
||||
void setImageFromMat(cv::Mat imageMat) {
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setOriImg(QPixmap oriImgInput)
|
||||
{
|
||||
pixOriImg = oriImgInput;
|
||||
if (pixOriImg.isNull()) {
|
||||
return;
|
||||
}
|
||||
if (MatType == false)
|
||||
showImg(pixOriImg);
|
||||
}
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setResImg(QPixmap resImgInput)
|
||||
{
|
||||
pixResImg = resImgInput;
|
||||
if (pixResImg.isNull()) {
|
||||
return;
|
||||
}
|
||||
if (MatType == true)
|
||||
showImg(pixResImg);
|
||||
}
|
||||
//无视当前类型直接显示
|
||||
void showImg(cv::Mat& imageMat) {
|
||||
if (imageMat.empty()) {
|
||||
return;
|
||||
}
|
||||
@@ -340,34 +452,27 @@ public:
|
||||
if (pixmap.isNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//bool itemUpdated = false;
|
||||
//for (QGraphicsItem* item : scene->items()) {
|
||||
// QGraphicsPixmapItem* pixmapItem = dynamic_cast<QGraphicsPixmapItem*>(item);
|
||||
// if (pixmapItem) {
|
||||
// pixmapItem->setPixmap(pixmap);
|
||||
// itemUpdated = true;
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
|
||||
//if (!itemUpdated) {
|
||||
// QGraphicsPixmapItem* item = new QGraphicsPixmapItem(pixmap);
|
||||
// scene->addItem(item);
|
||||
//}
|
||||
view->setPixmap(pixmap);
|
||||
//view->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
void showImg(QPixmap& imageMat) {
|
||||
view->setPixmap(imageMat);
|
||||
}
|
||||
void switchOriAndRes()//切换原图和结果图
|
||||
{
|
||||
if (MatType == false)
|
||||
{
|
||||
setImageFromMat(resImg);
|
||||
if(pixOriImg.isNull())
|
||||
showImg(resImg);
|
||||
else
|
||||
showImg(pixResImg);
|
||||
label2->setText(u8"结果图");
|
||||
}
|
||||
else
|
||||
{
|
||||
setImageFromMat(oriImg);
|
||||
if (pixOriImg.isNull())
|
||||
showImg(oriImg);
|
||||
else
|
||||
showImg(pixOriImg);
|
||||
label2->setText(u8"原图");
|
||||
}
|
||||
MatType = !MatType;
|
||||
@@ -411,6 +516,9 @@ private:
|
||||
}
|
||||
cv::Mat oriImg;
|
||||
cv::Mat resImg;
|
||||
QPixmap pixOriImg;
|
||||
QPixmap pixResImg;
|
||||
|
||||
bool MatType = false;//false ori true Res
|
||||
int in = 0;
|
||||
QLabel* label;
|
||||
@@ -419,50 +527,86 @@ private:
|
||||
//QGraphicsPixmapItem* item;
|
||||
SonGraphicsView* view;
|
||||
};
|
||||
class ImageWidgetController
|
||||
class ImageWidgetController :public QWidget
|
||||
{
|
||||
public:
|
||||
QMutex mutex;
|
||||
QList< ImageWidget*>ImageWidgetList;
|
||||
std::unordered_map<std::string, ImageWidget*>map;
|
||||
ImageWidget* createViewer(std::string nickName = "none")
|
||||
QGridLayout* Layout = new QGridLayout();
|
||||
ImageWidgetController()
|
||||
{
|
||||
this->setLayout(Layout);
|
||||
Layout->setContentsMargins(0, 0, 0, 0);
|
||||
}
|
||||
ImageWidget* createViewer(QString nickName = "none")
|
||||
{
|
||||
ImageWidget* ImageView = new ImageWidget();
|
||||
ImageWidgetList.push_back(ImageView);
|
||||
if (nickName != "none")
|
||||
map.insert({ nickName,ImageView });
|
||||
ImageView->setTitle(nickName);
|
||||
Layout->addWidget(ImageView);
|
||||
return ImageView;
|
||||
}
|
||||
bool showOriImg(cv::Mat img, int index)
|
||||
|
||||
QMutex mutex;
|
||||
QList< ImageWidget*>ImageWidgetList;
|
||||
std::unordered_map<QString, ImageWidget*>map;
|
||||
|
||||
bool setImg(cv::Mat img, imgWidgetShowType _type , int index)
|
||||
{
|
||||
if (index > ImageWidgetList.size())
|
||||
return false;
|
||||
if (img.channels() == 1)
|
||||
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
|
||||
ImageWidgetList[index]->showOriImg(img);
|
||||
switch (_type)
|
||||
{
|
||||
case imgWidgetOri:
|
||||
ImageWidgetList[index]->setOriImg(img);
|
||||
break;
|
||||
case imgWidgetRes:
|
||||
ImageWidgetList[index]->setResImg(img);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
bool showResImg(cv::Mat img, int index)
|
||||
bool setImg(cv::Mat img, imgWidgetShowType _type, QString nickName)
|
||||
{
|
||||
if (map.find(nickName) == map.end())
|
||||
return false;
|
||||
switch (_type)
|
||||
{
|
||||
case imgWidgetOri:
|
||||
map[nickName]->setOriImg(img);
|
||||
break;
|
||||
case imgWidgetRes:
|
||||
map[nickName]->setResImg(img);
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool setImg(QPixmap img, imgWidgetShowType _type, int index)
|
||||
{
|
||||
if (index > ImageWidgetList.size())
|
||||
return false;
|
||||
if (img.channels() == 1)
|
||||
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
|
||||
ImageWidgetList[index]->showResImg(img);
|
||||
switch (_type)
|
||||
{
|
||||
case imgWidgetOri:
|
||||
ImageWidgetList[index]->setOriImg(img);
|
||||
break;
|
||||
case imgWidgetRes:
|
||||
ImageWidgetList[index]->setResImg(img);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
bool showOriImg(cv::Mat img, std::string nickName)
|
||||
bool setImg(QPixmap img, imgWidgetShowType _type, QString nickName)
|
||||
{
|
||||
if (map.find(nickName) == map.end())
|
||||
return false;
|
||||
if (img.channels() == 1)
|
||||
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
|
||||
map[nickName]->showOriImg(img);
|
||||
}
|
||||
bool showResImg(cv::Mat img, std::string nickName)
|
||||
{
|
||||
if (map.find(nickName) == map.end())
|
||||
return false;
|
||||
if (img.channels() == 1)
|
||||
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
|
||||
map[nickName]->showResImg(img);
|
||||
switch (_type)
|
||||
{
|
||||
case imgWidgetOri:
|
||||
map[nickName]->setOriImg(img);
|
||||
break;
|
||||
case imgWidgetRes:
|
||||
map[nickName]->setResImg(img);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user