gpt4 book ai didi

c++ - 为什么图像出现在我的 QGraphicsView 派生类中的错误位置?

转载 作者:行者123 更新时间:2023-11-28 01:07:56 25 4
gpt4 key购买 nike

我已经创建了 QGraphicsView 的覆盖,用于在我的应用程序中的 QMdiSubWindow 内显示图像。后来我计划在此基础上添加对其他 float 形状的支持,所以 QLabel 还不够。这是类的基本布局:

class ImageView : public QGraphicsView
{
public:
ImageView(QWidget *parent);
~ImageView();

bool clean() const
{
return _clean;
}

void showImage(const QString &path);

private:
virtual void resizeEvent(QResizeEvent *event);

bool _clean;
QGraphicsScene *_scene;
QPixmap _viewPixmap;
QGraphicsPixmapItem *_viewPixmapItem;
};

我想避免每次加载新图像时都分配一个 QPixmap 元素,所以我只在类中保留一个,并在构造函数中创建一个像素图图形项,如下所示:

ImageView::ImageView(QWidget *parent) : QGraphicsView(parent), _clean(true)
{
_scene = new QGraphicsScene(this);
_scene->setBackgroundBrush(Qt::lightGray);
_viewPixmapItem = _scene->addPixmap(_viewPixmap);
setScene(_scene);
}

稍后当有人点击应用程序中的图像时,我调用(从主 gui 类)showImage 函数:

void ImageView::showImage(const QString &path)
{
_clean = false;
_viewPixmap.load(path);
_viewPixmapItem->setPixmap(_viewPixmap);
}

我的问题是,我第一次使用 showImage() 时,图像没有放在 View 的左上角,而是放在中间附近的某个地方,大部分都在 View 之外,但没有滚动条可见.下次我尝试显示图像时,在调用 showImage() 后得到一个调整大小事件,图像正确显示,并且所有后续显示都正常;图像与 View 的左上角对齐,并且可以看到滚动条以反射(reflect)图像对于 View 而言太大(我计划稍后添加缩放功能)。我一遍又一遍地阅读文档,但变得更加困惑,你能告诉我我遗漏了什么吗?谢谢。

编辑: Here's图像如何看待第一次调用 showImage 和 here是它在后续的外观上的样子,这就是我想要的。您可以看到 ImageView 小部件放置在 QMdiArea 内的 MDI 样式子窗口中。

EDIT2:应用程序将信息写入日志文件,这是我尝试显示前三张图片的部分:

Activated image in project list, name: obiekt_blisko-0000_0.bmp
ViewMdiSubWindow::prefit: Pre-fitting, new size: 516x352
MDI window size: 516x352
Child QWidget window size: 628x477
ImageView::resizeEvent: Received resize event, old size was: -1x-1, new size: 500x313
ImageView::showImage: Showing image: D:\praca\dane\pomiar3d_3\obiekt_blisko_L\obiekt_blisko-0000_0.bmp
View size after setting new pixmap: 502x315
Item position (parent coords): 0,0

(此后图片显示不正确)

Activated image in project list, name: obiekt_blisko-0001_0.bmp
MDI window size: 516x352
Child QWidget window size: 502x315
ImageView::showImage: Showing image: D:\praca\dane\pomiar3d_3\obiekt_blisko_L\obiekt_blisko-0001_0.bmp
View size after setting new pixmap: 502x315
Item position (parent coords): 0,0
ImageView::resizeEvent: Received resize event, old size was: 500x313, new size: 483x296

(现在图像OK了)

Activated image in project list, name: obiekt_blisko-0002_0.bmp
MDI window size: 516x352
Child QWidget window size: 502x315
ImageView::showImage: Showing image: D:\praca\dane\pomiar3d_3\obiekt_blisko_L\obiekt_blisko-0002_0.bmp
View size after setting new pixmap: 502x315
Item position (parent coords): 0,0

(这个和下一个事件是一样的,图像都可以)

最佳答案

图像以其左上角显示在 View 中心的原因是因为您的场景具有 (0,0,0,0) 的 sceneRectQGraphicsView 默认居中显示场景。

设置seneRect修复矩形可能会解决您的问题。来电 centerOn图像更改后也会有所帮助。

关于c++ - 为什么图像出现在我的 QGraphicsView 派生类中的错误位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5143388/

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