• 6975阅读
  • 10回复

[提问]QLable显示图片 [复制链接]

上一主题 下一主题
离线xuxb
 
只看楼主 倒序阅读 楼主  发表于: 2012-12-24
— 本帖被 XChinux 执行合并操作(2012-12-24) —
关键词: QLabel显示图片
为什么QLabel不能显示图片??如果把下面代码写到main函数可以显示
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent){  QHBoxLayout *layout_label = new QHBoxLayout(this);  QLabel *w = new QLabel(this);  QPalette palette;  palette.setBrush(w->backgroundRole(), QBrush(QPixmap("E:\\Qt\\Demo\\BaseUi\\images\\sec\\SkanBack_Min.png")));  w->setPalette(palette);  w->setFixedSize(200,109);  layout_label->addWidget(w);  setLayout(layout_label);}

承接C/C++ MFC Qt  网络通信等项目!!!
离线xuxb
只看该作者 1楼 发表于: 2012-12-23
QLabel 平铺问题
问题很奇怪啊!!高手请进

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
#if 0
  MyWidget w;  //自定义的类
  w.show();
#else
  QLabel *w = new QLabel;
  QPalette palette;
  palette.setBrush(w->backgroundRole(), QBrush(QPixmap("E:\Qt\Demo\BaseUi\images\sec\SkanBack_Min.png")));
  w->setPalette(palette);
  w->setFixedSize(200,109);
  w->show(); //可以正确平铺QLabel
#endif
  return a.exec();
}


但是如果用类MyWidget 封装一下就不行了
构造函数

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
  QLabel *w = new QLabel(this);
  QPalette palette;
  palette.setBrush(w->backgroundRole(), QBrush(QPixmap("E:\Qt\Demo\BaseUi\images\sec\SkanBack_Min.png")));
  w->setFixedSize(200,109);
  w->setPalette(palette);
  //w->show();
}
为什么封装到类中就不行了呢

承接C/C++ MFC Qt  网络通信等项目!!!
离线roywillow

只看该作者 2楼 发表于: 2012-12-23
一点也不奇怪
第二个情况下,QLabel不会作为顶级窗口出现,因为它已经有parent了(当然这也只是默认情况下)
于是你需要个layout来管理它的大小
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线xuxb
只看该作者 3楼 发表于: 2012-12-23
哦 好的 我试试
承接C/C++ MFC Qt  网络通信等项目!!!
离线xuxb
只看该作者 4楼 发表于: 2012-12-23
回 1楼(roywillow) 的帖子
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
  QHBoxLayout *layout_label = new QHBoxLayout(this);
  QLabel *w = new QLabel(this);
  QPalette palette;
  palette.setBrush(w->backgroundRole(), QBrush(QPixmap("E:\\Qt\\Demo\\BaseUi\\images\\sec\\SkanBack_Min.png")));
  w->setPalette(palette);
  w->setFixedSize(200,109);
  layout_label->addWidget(w);
  layout_label->setSpacing(0);
  layout_label->setContentsMargins(0,0,0,0);
  setLayout(layout_label);

  //w->show();
}这样写了 还是不行啊??
承接C/C++ MFC Qt  网络通信等项目!!!
离线xuxb
只看该作者 5楼 发表于: 2012-12-23
请在帮帮忙吧
承接C/C++ MFC Qt  网络通信等项目!!!
离线xuxb
只看该作者 6楼 发表于: 2012-12-24
顶顶
承接C/C++ MFC Qt  网络通信等项目!!!
离线xuxb
只看该作者 7楼 发表于: 2012-12-24
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
  QHBoxLayout *layout_label = new QHBoxLayout(this);
  QLabel *w = new QLabel(this);
  QPalette palette;
  palette.setBrush(w->backgroundRole(), QBrush(QPixmap("E:\\Qt\\Demo\\BaseUi\\images\\sec\\SkanBack_Min.png")));
  w->setPalette(palette);
  w->setFixedSize(200,109);
  layout_label->addWidget(w);
  setLayout(layout_label);
}
承接C/C++ MFC Qt  网络通信等项目!!!
离线roywillow

只看该作者 8楼 发表于: 2012-12-24
有setPixmap()这种东西可以用
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线xuxb
只看该作者 9楼 发表于: 2012-12-24
但是setPixmap 不能平铺而且不能随着控件变大而变大
承接C/C++ MFC Qt  网络通信等项目!!!
在线XChinux

只看该作者 10楼 发表于: 2012-12-24
看着楼主的问题很纠结.

从QLabel派生一个类,比如叫MyLabel, 然后重写setPixmap()方法
void MyLabel::setPixmap(const QPixmap &px)
{
    setAutoFillBackground(true);
    if (!text().isEmpty())
    {
        setText("");
    }
    QPalette pal = palette();
    pal.setBrush(QPalette::Background, QBrush(px));
    setPalette(pal);
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个