[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小

简介: [Qt5] 右键窗体弹出菜单,实现图像适应窗体大小

📢 前言

  作为一种交互性强、使用方便的右键菜单在程序中是非常常用的,在Qt中可以轻松的实现。背景:通过鼠标滑轮对图像进行放大、缩小之后,需要一个操作来对图像进行复原,所以我想到了通过鼠标右键弹出对应菜单的方式来完成图像的复原,即图像自适应widget窗体大小。


💤 右键弹菜单功能

方法一:给一个QWidget添加QActions,设置QWidgetcontextMenuPolicy属性为 Qt::ActionsContextMenu值,使得窗口菜单以这些添加的QActions菜单项组成一个右键菜单。

MU_VisionUI_Dlg::MU_VisionUI_Dlg(QWidget *parent)
  : QWidget(parent)
{
  ui.setupUi(this); 
  //为窗口添加QActions
  ui.ImageWidget->addAction(new QAction(u8"&动作1", this));
  ui.ImageWidget->addAction(new QAction(QIcon(":/images/mark.png"), u8"&动作2", this));
  ui.ImageWidget->addAction(new QAction(u8"&动作3", this));
  //设置contextMenuPolicy属性值为 '以Actions为弹出菜单的菜单项组成菜单'
  ui.ImageWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
}

效果:


方法二(本文使用的方法)重写QWidget的右键事件处理函数void QWidget::contextMenuEvent ( QContextMenuEvent * event )

//.h——头文件
#include <QMenu>
#include <QAction>
#include <QCursor>
public:
  void contextMenuEvent(QContextMenuEvent *);
private:
  QAction* Act_adjustForm;
private slots:
  void slot_adjustForm();
//.cpp——源文件
MU_VisionUI_Dlg::MU_VisionUI_Dlg(QWidget *parent)
     : QWidget(parent)
 {
     ui.setupUi(this);
     Act_adjustForm = new QAction(u8"&适应窗口", this);
     connect(Act_adjustForm, SIGNAL(triggered()), this, SLOT(slot_adjustForm()));
 }
void Widget::contextMenuEvent(QContextMenuEvent *) //重绘鼠标右键事件处理函数(增加菜单选项)
{
  QCursor cur = this->cursor();
  QMenu *menu = new QMenu(this);
  menu->addAction(Act_adjustForm); //添加菜单项1
  //menu->addAction(Act_two); //添加菜单项2
  //menu->addAction(Act_three); //添加菜单项2
  menu->exec(cur.pos()); //关联到光标
}
void MU_VisionUI_Dlg::slot_adjustForm()   //实现对应菜单选项的槽函数
{
  GRAPHICS_VIEW->mainView()->adjustForm();
}

💤 图像自适应窗体

  上面的adjustForm()函数是我在继承QGraphicsView类的一个子类中实现的一个图像自适应窗体的功能,一并贴到下面供大家学习:

void MF_GraphicsView::adjustForm()
{
  QRectF bounds = m_scene->itemsBoundingRect();
  bounds.setWidth(bounds.width());        
  bounds.setHeight(bounds.height());      
  m_view->fitInView(bounds, Qt::KeepAspectRatio); //场景scene适应视图view大小 
}

  这个实现的核心函数是m_view->fitInView(bounds, Qt::KeepAspectRatio)。主要功能就是使场景scene和其绑定的图元大小适应视图view大小:由于场景上图元item(图像)通过缩放不断变化大小,即场景scene大小随之改变,但视图view的大小是始终固定的,所以可通过该函数实现场景scene及其上面的图元item大小自适应视图view大小。

效果展示:

ps:不了解图元、场景和视图关系的道友可参考我另一篇博文:[Qt5] QGraphics图形视图框架(Item、Scene和View)


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。


目录
相关文章
|
6月前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
69 5
|
C++ Python
Python+Qt窗体或Django网页支付宝收款码-扫码付款实例
Python+Qt窗体或Django网页支付宝收款码-扫码付款实例
392 0
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
165 1
|
5月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
77 1
|
5月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
89 0
|
5月前
|
前端开发
自定义QT QWidget对象响应弹出菜单的解决方法
自定义QT QWidget对象响应弹出菜单的解决方法
81 1
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
67 0
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
36 0
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
60 0
|
5月前
|
资源调度 算法 计算机视觉
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
65 0