QScrollArea的缩放如何实现?

2024无限可能! 2020-09-14 05:03:05
各位大佬,我现在有一个需求,是这样子的:
我在QScrollArea区域内放了一个QWidget,我在QScrollArea区域中,滑动鼠标滚轮,这样子就能对QWidget进行缩放
请问这样的功能要怎么实现呀?
各位大佬,救救小孩
...全文
882 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-08
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10794527.html
非弋 2020-09-16
  • 打赏
  • 举报
回复
大致是拦截QScrollArea的鼠标滚轮事件,事件过滤器、重写void wheelEvent(QWheelEvent *event)都可以, eg:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class QLabel;
class QScrollArea;
class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	MainWindow(QWidget *parent = nullptr);
	~MainWindow();

protected:
	bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE;

private:
	Ui::MainWindow *ui;
	QLabel *m_label;
	QScrollArea *m_scrollArea;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QScrollArea>
#include <QWheelEvent>

MainWindow::MainWindow(QWidget *parent)
	: QMainWindow(parent)
	, ui(new Ui::MainWindow)
{
	ui->setupUi(this);
	m_label = new QLabel("1111111", this);
	m_scrollArea = new QScrollArea(this);
	m_scrollArea->setWidget(m_label);
	m_scrollArea->resize(300, 300);
	m_scrollArea->installEventFilter(this);
}

MainWindow::~MainWindow()
{
	delete ui;
}

bool MainWindow::eventFilter(QObject *obj, QEvent *e)
{
	if (obj != m_scrollArea){
		return QMainWindow::eventFilter(obj, e);
	}
	if (QApplication::keyboardModifiers() == Qt::ControlModifier){
		if (e->type() == QEvent::Wheel){
			QWheelEvent *event = (QWheelEvent *)e;
			if (event->angleDelta().y() > 0){
				m_label->resize(m_label->size()*1.5);
			}
			else if (event->angleDelta().y() < 0){
				m_label->resize(m_label->size()*0.5);
			}
		}
	}
	return QMainWindow::eventFilter(obj, e);
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧