[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)


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


目录
相关文章
|
3月前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
26 5
|
4月前
|
搜索推荐 区块链 C++
C++ Qt开发:ToolBar与MenuBar菜单组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`ToolBar`工具栏组件以及与之类似的`MenuBar`菜单栏组件的常用方法及灵活运用。
88 1
|
7月前
|
C++ Python
Python+Qt窗体或Django网页支付宝收款码-扫码付款实例
Python+Qt窗体或Django网页支付宝收款码-扫码付款实例
163 0
|
4月前
|
C++ 开发者 UED
C++ Qt开发:MdiArea多窗体组件
QMdiArea(Multiple Document Interface Area)是Qt中用于创建多文档界面的组件。它提供了一种在单个窗口中管理多个文档的方式,每个文档通常是一个子窗口(`QMdiSubWindow`)。该组件主要用于设计多文档界面应用程序,具备有多种窗体展示风格,实现了在父窗体中内嵌多种子窗体的功能,使开发者能够轻松地创建支持多个文档的应用程序。
55 0
C++ Qt开发:MdiArea多窗体组件
|
4月前
|
C++ 索引
C++ Qt开发:Tab与Tree组件实现分页菜单
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`tabWidget`选择夹组件与`TreeWidget`树形选择组件,的常用方法及灵活运用。
59 0
C++ Qt开发:Tab与Tree组件实现分页菜单
|
5月前
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
27 0
|
7月前
|
网络协议 C++ Python
Qt+C++ TCP发送接收信息客户端与服务端窗体
Qt+C++ TCP发送接收信息客户端与服务端窗体
67 0
Qt+C++ TCP发送接收信息客户端与服务端窗体
|
7月前
|
C++ 计算机视觉 Python
VS+QT+PCL点云窗体程序显示编辑保存
VS+QT+PCL点云窗体程序显示编辑保存
92 0
VS+QT+PCL点云窗体程序显示编辑保存
|
C++
C/C++ Qt Tree与Tab组件实现分页菜单
虽然`TreeWidget`组件可以实现多节点的增删改查,但多节点操作显然很麻烦,在一般的应用场景中基本上只使用一层结构即可解决大部分开发问题,`TreeWidget`组件通常可配合`TabWidget`组件,实现一个类似于树形菜单栏的功能,当用户点击菜单栏中的选项时则会跳转到不同的页面上。
289 0
C/C++ Qt Tree与Tab组件实现分页菜单
|
C++ 容器
C/C++ Qt MdiArea 多窗体组件应用
MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们所有的窗体创建与操作都在这个容器内进行,如下我们将具体介绍该组件的常用使用技巧。
273 0
C/C++ Qt MdiArea 多窗体组件应用

热门文章

最新文章

推荐镜像

更多