本来想设计一个像QQ截图里面的放大镜一样的效果,网上搜索半天得到的资料都不尽人意,所以调整了方案在窗口中动态插入一个Qlabel控件,用这个控件来处理图像,代码中也结合了网上的资源处理步骤如下:
1、插入Qlabel控件,让控件置顶,位置根据父控件自动调整,大小不变;
QLabel *showManger;
showManger = new QLabel(ui.page_getOneFrame);
showManger->raise();
2、移动鼠标获取父控件的坐标,并截取适当的坐标范围的图片
3、将截取的图片放在Qlabel控件上显示
void GPVisual::keyPressEvent(QKeyEvent *e)
{
local = QCursor::pos();
if (e->key() == Qt::Key_Up)
{
QCursor::setPos(QPoint(local.x(), local.y() - 1));
}
if (e->key() == Qt::Key_Down)
{
QCursor::setPos(QPoint(local.x(), local.y() + 1));
}
if (e->key() == Qt::Key_Left)
{
QCursor::setPos(QPoint(local.x() -1, local.y()));
}
if (e->key() == Qt::Key_Right)
{
QCursor::setPos(QPoint(local.x() + 1, local.y()));
}
if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down || e->key() == Qt::Key_Left || e->key() == Qt::Key_Right)
{
::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(50);
::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//获取鼠标顶点位置图片局部放大
Mainhwind->GetMposition(&hv_mRow, &hv_mColumn, &Btn);
Rectangle1Domain(ParamManage::GetSingleTon()->m_pCameraConfig.HImsrcImage, &objImg, hv_mRow - 50, hv_mColumn - 50, hv_mRow + 50, hv_mColumn + 50);
CropDomain(objImg, &objImg);
cv::Mat cvImg = HObject2Mat(objImg);
cv::Point p0 = cv::Point(cvImg.rows / 2, 0);
cv::Point p1 = cv::Point(cvImg.rows / 2, cvImg.cols);
cv::Point p2 = cv::Point(0, cvImg.cols / 2);
cv::Point p3 = cv::Point(cvImg.rows, cvImg.cols / 2);
cv::line(cvImg, p0, p1, cv::Scalar(0, 0, 255), 1, 4);
cv::line(cvImg, p2, p3, cv::Scalar(0, 0, 255), 1, 4);
QImage Img = cvMat2QImage(cvImg);
showManger->clear();
QPixmap pixmap = QPixmap::fromImage(Img);
int with = showManger->width();
int height = showManger->height();
QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
//QPixmap fitpixmap = pixmap.scaled(with, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 按比例缩放
showManger->setPixmap(fitpixmap);
}
if (e->key() == Qt::Key_Return)
{
::mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
Sleep(50);
::mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}
}
设计出来效果如下: