栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

  • 博客主页:https://loewen.blog.csdn.net
  • 欢迎点赞  收藏 ⭐留言  如有错误敬请指正!
  • 本文由 丶布布原创,首发于 CSDN,转载注明出处
  • 现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:
      •  前言
      •  右键弹菜单功能
      •  图像自适应窗体


 前言

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


 右键弹菜单功能

方法一:给一个QWidget添加QActions,设置QWidget的contextMenuPolicy属性为 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 
#include 
#include 

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)


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号