QT缩放后调整大小问题
我正在尝试使用 QT 和 C++ 放大图片。
我在类中继承了 QLabel 对象来显示图片。并且还将这个 QLabels 放在 mdiarea 中。
缩放功能工作正常,但 qlabel 不会立即更新其大小。如果我尝试手动(使用光标)调整大小,程序会自动处理它并根据我的意愿调整 qlabel 的大小。
我怎样才能立即更新尺寸。
感谢您的帮助。 :)
bool MdiChild::event ( QEvent * e ){
//qDebug("asd1");
if(e->type() == QEvent::Wheel){
int numDegrees = ((QWheelEvent*) e)->delta() / 8;
double numSteps = (double)numDegrees/150;
int w = pix->width();
int h = pix->height();
ratio += numSteps;
qDebug("ratio = %f", ratio);
QPixmap* p = new QPixmap(pix->scaledToHeight ( (int)(h * ratio),Qt::FastTransformation ));
setPixmap(*p);
adjustSize();
adjustSize();
update();
}
return QWidget::event(e);
}
问题已解决,但我想我无法回答我自己的问题。 当我将相同的事件添加到父窗口时,问题就解决了。但是,当我最大化窗口时,内部对象也会收到事件并导致最大化窗口崩溃。
bool ImageProcessor::event ( QEvent * e ){
if(e->type() == QEvent::Wheel){
QList<QMdiSubWindow *> childList = ui.mdiArea->subWindowList();
for(int i = 0; i<childList.count(); i++){
childList[i]->adjustSize();
}
}
return QWidget::event(e);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要一个QScrollArea来保存您的QLabel。否则,当窗口调整大小时,您的 QLabel 将没有有滚动条。
查看示例以了解如何创建图像查看器以及它们如何调整大小。
ImageViewer 示例
可缩放图片查看器
You need a QScrollArea to hold your QLabel. Otherwise when the window resizes your QLabel will not have scrollbars.
Look at the examples to see how to create an image viewer and how they resize.
ImageViewer example
Zoomable Picture Viewer
问题已解决,但我想我无法回答我自己的问题。当我将相同的事件添加到父窗口时,问题就解决了。但是,当我最大化窗口时,内部对象也会收到事件并导致最大化窗口崩溃。
The problem is resolved but I think I cannot answer my own question. When I add the same event to the parent window problem is solved. But when I maximize the window the inner object also got the event and crashes the maximized window.