还剩信号连接

This commit is contained in:
2024-05-20 18:13:21 +08:00
parent b214669be7
commit ed55e511ec
32 changed files with 237 additions and 469 deletions
@@ -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;
}
}
};