gpt4 book ai didi

c++ - QPen setCosmetic 在高 QGraphicsView 比例下不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:04 27 4
gpt4 key购买 nike

我有一个 QGraphicsView 和一个 QGraphicsItem 添加到 graphicsView 的场景。我重写 QGraphicsView wheelEvent 来进行比例 View ,但我希望我的图形项目宽度不变。

为此,我在图形项绘制功能中为笔设置了 cosmetic true。它工作正常,但在缩小后,修饰功能不起作用,图形项目宽度开始变大。

MyGraphicsItem.h

#include <QGraphicsItem>

class MyGraphicsItem : public QGraphicsItem
{
public:
MyGraphicsItem();
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
QRectF boundingRect() const;
};

MyGraphicsItem.cpp

#include "MyGraphicsItem.h"
#include <QPen>
#include <QPainter>

MyGraphicsItem::MyGraphicsItem()
{
}

void MyGraphicsItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
QPen pen;
pen.setColor(Qt::black);
pen.setCosmetic(true);

painter->setPen(pen);
painter->drawLine(QPointF(0, 250), QPointF(500, 250));
}

QRectF MyGraphicsItem::boundingRect() const
{
return QRectF(0, 0, 500, 500);
}

MyGraphicsView.h

#include <QGraphicsView>

class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView();
void wheelEvent(QWheelEvent* event);
};

MyGraphicsView.cpp

#include "MyGraphicsView.h"
#include <QtMath>
#include <QDebug>
#include <QGLFormat>
#include <QWheelEvent>
#include <QStyleOptionGraphicsItem>

MyGraphicsView::MyGraphicsView()
{
setScene(new QGraphicsScene(0, 0, 500, 500));

setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

setViewport(new QGLWidget);
}

void MyGraphicsView::wheelEvent(QWheelEvent* event)
{
qreal s = qPow(2, event->delta() / 120 / 4.0);
scale(s, s);
}

主窗口.h

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
};

主窗口.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

#include "MyGraphicsItem.h"
#include "MyGraphicsView.h"

MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

auto view = new MyGraphicsView;
view->scene()->addItem(new MyGraphicsItem);

setCentralWidget(view);
}

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

主要.cpp

#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

有什么建议吗?

我看到的另一个问题是,在绘制线上进行更多缩放(缩放)后,QGraphicsView 的滚动条会跳到 View 的左上角。

最佳答案

默认情况下,QGraphicsItem 根据 View 转换进行调整。

您可以通过在 MyGraphicsItem 构造函数中添加 setFlag(QGraphicsItem::ItemIgnoresTransformations); 来忽略它。当您放大/缩小时,您的项目不会缩放。

关于c++ - QPen setCosmetic 在高 QGraphicsView 比例下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55546918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com