- 博客主页: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)
| 戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |


![[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小 [Qt5] 右键窗体弹出菜单,实现图像适应窗体大小](http://www.mshxw.com/aiimages/31/861533.png)
