• 13155阅读
  • 10回复

QWidget添加背景图片 [复制链接]

上一主题 下一主题
离线wangliangru
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-20
请大家帮帮忙,如何在widget中添加背景图片?
网上介绍的方法  :    widget = new QWidget(0);
                                           QPalette palette;
                         palette.setBrush(QPalette::Base,QBrush(QPixmap(":/Resources/background.png")));
                                          widget->setPalette(palette);
这种方法不行,试了多次,显示不出图片。我的“background.png”放在resource文件夹中。*v.qrc中的路径也是这个 ,我不知道哪里出错。
请求高手帮忙解决
不胜感激
在线等待
谢谢
离线feiying888

只看该作者 1楼 发表于: 2009-04-20
用绘图事件
void Interface :: paintEvent(QPaintEvent *event)
{
    QPainter painter(this);            // 建立QPainter
    painter.drawPixmap(0, 0, QPixmap( "XXX.png" ));
}

在构造widget时,会就会把图片显示出来,如果需要更新,可以用updata();
离线wangliangru
只看该作者 2楼 发表于: 2009-04-20
谢谢你。可是我这边还是不行
仍然没有图片。
我把路径改了也不可以
void MainWindow::paintEvent()
{
     QPainter painter(this);
     painter.drawPixmap(0, 0, QPixmap( ":/Resources/background.png" ));

}
离线wangliangru
只看该作者 3楼 发表于: 2009-04-20
请哪位高手帮帮我好吗
万分感谢!
离线feiying888

只看该作者 4楼 发表于: 2009-04-21
你是在windows环境下吗? 怎么你的路径 ":/Resources/background.png"  没有指定盘符?
用绘图事件,应该没问题的,我一直在用呢。你先查一下路径对不对吧?
离线guyansrg

只看该作者 5楼 发表于: 2009-04-21
估计是文件路径的问题,可以改为路径 "Resources/background.png" 试一试。
离线wangliangru
只看该作者 6楼 发表于: 2009-04-21
我是在windows环境下的,在.qrc文件中的路径都是这样的
我的工具栏上的图标都是可以添加的。它们的路劲都是一样的,不需要加盘符。
运行时也没有错,只是背景图案仍然是空白。。。。。
离线haulm

只看该作者 7楼 发表于: 2009-06-17
":/Resources/background.png"改成
"C:\\Resources\\background.png"
最好使用绝对路径
   palette.setBrush(QPalette::Base,QBrush(QPixmap(":/Resources/background.png")));
                                          widget->setPalette(palette);
这种写法很奇怪,Windows上能工作,但是Linux下或许是不同编译的Qt是不支持这种写法
对主窗口的背景图片只能用paintEvent()进行操作,而只有QListWidget QTreeWidget支持用setBrush直接贴上图片背景。
离线malaoba
只看该作者 8楼 发表于: 2009-06-17
你在构造中加上 setAutoFillBackground(true) 试试
离线bgydragon

只看该作者 9楼 发表于: 2009-07-13
引用第8楼malaoba于2009-06-17 14:14发表的  :
你在构造中加上 setAutoFillBackground(true) 试试


正解,子控件需要此函数才能显示背景图。
离线nrc_douningb
只看该作者 10楼 发表于: 2009-08-01
请大家帮帮忙,如何在widget中添加背景图片?
网上介绍的方法  :    widget = new QWidget(0);
                                           QPalette palette;
                         palette.setBrush(QPalette::Base,QBrush(QPixmap(":/Resources/background.png")));
                                          widget->setPalette(palette);
这种方法不行,试了多次,显示不出图片。我的“background.png”放在resource文件夹中。*v.qrc中的路径也是这个 ,我不知道哪里出错。
请求高手帮忙解决
不胜感激
在线等待
谢谢

方法很多,这里说常用的三种:
1:用楼主所说的调色板方式来实现。
                                           widget = new QWidget(0);
                                           QPalette palette;
                                           palette.setBrush(widget ->backGroundRole(),QBrush(QPixmap(":/Resources/background.png")));
                                           widget->setPalette(palette);
                                           widget ->setAutoBackgroundRloe(true);
2:用上边几位大牛所收的painterEvent()事件,把图片给画上去~不过这个也是用图片作为画刷的纹理,跟上边道理一样~

3:用qss:
                                            widget = new QWidget(0);
                                            widget->setStyleSheet("background-image:url(:/Resources/background.png);") ;

    
快速回复
限100 字节
 
上一个 下一个