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

[Qt5] 右键窗体d出菜单,实现图像适应窗体大小,第1张

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

文章预览:
      • 📢 前言
      • 💤 右键d菜单功能
      • 💤 图像自适应窗体


📢 前言

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


💤 右键d菜单功能

方法一:给一个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为d出菜单的菜单项组成菜单'
	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)


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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/801121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存