QT 使用ScrollArea和label显示图片,不能自适应大小

siasjack 2013-09-03 03:57:32
我有个QT程序,在主窗口上点击“显示图片”就会弹出ScrollArea的窗口,ScrollArea里面有个label,set_image函数是在这个窗口中显示图片
------哥哥哥哥哥哥----------
如下是显示图片的程序。
但是现在问题来了,每一次显示图片,窗口都是和我用ui画的那个text label一样大,显示不完全图片
请问怎么改才能让这个text label能自适应图片大小来完整显示图片
void ScrollArea::set_image(char *filename)
{
QImage *ppm = new QImage(filename);
ui->label->setPixmap(QPixmap::fromImage(*ppm));
return;
}


各位大哥帮忙,弄好后我就把代码贴上来,供像我这样的新人学习使用
...全文
2436 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
moses1994 2015-04-09
  • 打赏
  • 举报
回复
谢谢楼主分享
亥尚 2015-03-05
  • 打赏
  • 举报
回复
我想问一下,我现在显示的图片上有一小块区域是可点击的,现在我做图片是自适应屏幕的,但一改变大小点击事件就没了,这应该怎么调整呢。
siasjack 2013-09-05
  • 打赏
  • 举报
回复
引用 4 楼 q245879 的回复:
谢谢楼主分享经验。
嘿嘿 我是新手 项目需要临时学习的 大家多分享 共同进步的更快!
siasjack 2013-09-04
  • 打赏
  • 举报
回复
现在有了更优化的显示方案,根据图片的大小调整窗口的大小,这样就不会有滚动条了,如果你担心图片过大,屏幕显示不完,可以设置scrollarea的高宽最大值 把原来的两个scrollarea删掉一个,这样只有一个scrollarea,所以下面使用了this,为了改变窗口大小使用了resize函数
void ScrollArea::set_image(char *filename)
{
    QImage *ppm = new QImage(filename);
    label = new QLabel();
    printf("ppm->width()=%d, ppm->height()=%d\n",ppm->width(), ppm->height()); //获取图片的宽度和高度
    label->setPixmap(QPixmap::fromImage(*ppm));
    this->setWidget(label);
    /*设置窗口最大高度和宽度为1024*768*/
    this->setMaximumHeight(768);
    this->setMaximumWidth(1024);
    this->resize(QSize( ppm->width()+5, ppm->height() +5));
    return;
}
这样就可以完美的显示图片了!
siasjack 2013-09-04
  • 打赏
  • 举报
回复
引用 1 楼 q245879 的回复:

ui->label->resize(ppm->width(), ppm->height());
多谢哥们! 现在有了更好的方法,也能达到我想要的效果! 上代码,让需要的人看看! 我的情况是一个mainwindow,上面有“显示图片”的按钮,点击后会调用一个scrollarea的另一个窗口,窗口中显示图片,窗口大小固定,当图片过大时会有滚动条方便完全显示出来图片,下面是代码 点击显示图片后调用的函数
void MainWindow::Show_Image_byname(char *filename)
{
    if(!filename || !strlen(filename))
    {
        return;
    }
    char buf[128]= {0};
    strcpy(buf,SAVE_IMAGE);
    strcat(buf,filename);
    ScrollArea *new_image = new ScrollArea();
    new_image->set_image(buf);
    new_image->setBackgroundRole(QPalette::Dark);
    new_image->show();
    return;
}
在scrollarea.h中添加私有变量QLabel
private:
    Ui::ScrollArea *ui;
    QLabel *    label;
析构函数中添加释放QLabel的空间
ScrollArea::~ScrollArea()
{
    delete ui;
    if(label)
    {
        delete label;
    }
}
实现函数
void ScrollArea::set_image(char *filename)
{
    QImage *ppm = new QImage(filename);
    label = new QLabel();
    //ui->label->resize(ppm->width(), ppm->height());
    label->setPixmap(QPixmap::fromImage(*ppm));
    ui->scrollArea->setWidget(label);
    return;
}
这样就可以实现了! 注意:scrollarea是用ui画出来的,大小固定,需要花两个scrollarea,大小一样,所以代码中出现了ui->scrollarea 但是现在想优化下,如果图片大没问题可以用滚动条显示完全,但是图片过小,就会在左上角显示出来,而其他的空间则是空白,很难看,怎么才能做到,如果图片过小,不能填充完整个scrollarea的空间,就让图片剧中显示? 求教大婶
_Gx 2013-09-04
  • 打赏
  • 举报
回复
谢谢楼主分享经验。
_Gx 2013-09-03
  • 打赏
  • 举报
回复

ui->label->resize(ppm->width(), ppm->height());

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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