使用 Qt 更改方向时图像被剪切

发布于 2024-11-01 04:34:19 字数 1133 浏览 1 评论 0原文

大家好,

我想使用 qt 开发一个 ImageViewer。我正在尝试通过缩放大图像来调整它们的大小。我的问题是,当我更改屏幕方向时,图像的某些部分会被剪切,而且如果我以横向模式打开图像,默认情况下,即使我改回纵向模式,图像的尺寸仍然很小。我做错了什么?

请帮帮我。 代码

这是我编写的ImageViewer::ImageViewer() { setAttribute(Qt::WA_DeleteOnClose); QAction *back = new QAction(this); 返回->setText(QString("返回")); 连接(返回,信号(触发()),这个,插槽(关闭())); 返回->setSoftKeyRole(QAction::PositiveSoftKey); 添加动作(返回);

imageLabel = new QLabel();
imageLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
imageLabel->setAlignment(/*Qt::AlignLeft|*/Qt::AlignCenter);
QWidget *widget = new QWidget;
layout=new QStackedLayout();
layout->addWidget(imageLabel);
widget->setLayout(layout);
setCentralWidget(widget);

}

void ImageViewer::showImage(QString filePath) { QImageReader 阅读器; reader.setFileName(文件路径); QSize imageSize = reader.size(); imageSize.scale(size(), Qt::KeepAspectRatio); reader.setScaledSize(imageSize); QImage 图像 = reader.read(); imageLabel->setPixmap(QPixmap::fromImage(image)); imageLabel->调整大小(); }

HI all,

I wnt to develop an ImageViewer using qt. I m trying to resize big images by scaling them. My problem is , when i change the screen orientation some part of the image gets clipped and also if i open the image in landscape mode, by default the size of image remains small even when i change back to portrait mode. What am i Doin wrong?

Please help me out. Heres the code dat i hv written

ImageViewer::ImageViewer()
{
setAttribute(Qt::WA_DeleteOnClose);
QAction *back = new QAction(this);
back->setText(QString("Back"));
connect(back,SIGNAL(triggered()),this,SLOT(close()));
back->setSoftKeyRole(QAction::PositiveSoftKey);
addAction(back);

imageLabel = new QLabel();
imageLabel->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
imageLabel->setAlignment(/*Qt::AlignLeft|*/Qt::AlignCenter);
QWidget *widget = new QWidget;
layout=new QStackedLayout();
layout->addWidget(imageLabel);
widget->setLayout(layout);
setCentralWidget(widget);

}

void ImageViewer::showImage(QString filePath)
{
QImageReader reader;
reader.setFileName(filePath);
QSize imageSize = reader.size();
imageSize.scale(size(), Qt::KeepAspectRatio);
reader.setScaledSize(imageSize);
QImage image = reader.read();
imageLabel->setPixmap(QPixmap::fromImage(image));
imageLabel->adjustSize();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

您应该重新实现 QLabel 的 resizeEvent 或为其安装事件过滤器并处理QResizeEvent 在那里
showImage 方法的内容应该转到调整大小事件的处理程序。
目前您正在使用 ImageViewer 小部件的 size() (这似乎是从 QMainWindow 派生的),最好使用 imageLabel.size();或最好的 QResizeEvent::size() ,因为如果您将来更改 UI 布局,这将防止出现问题。

You should re-implement QLabel's resizeEvent or install event filter to it and handle QResizeEvent there
The content of showImage method should go to handler of a resize event.
Currently you are using size() of ImageViewer widget (which seems to be derived from QMainWindow), it's better to use imageLabel.size(); or the best QResizeEvent::size() as this will prevent a problem if you will change UI layout in future.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文