• 5281阅读
  • 8回复

先生成一个widget,设置背景后,再上面生成一个button,为什么这个button背景和widget一样?? [复制链接]

上一主题 下一主题
离线snowman_st
 
只看楼主 倒序阅读 楼主  发表于: 2009-05-20
先生成一个widget,设置背景后,再上面生成一个button,为什么这个button背景和widget一样??我想把这个button用纯色表示,修改background color ,但是它总是显示widget 的背景,请问高手怎么解决这个问题,急
离线jaypei

只看该作者 1楼 发表于: 2009-05-20
用哪个函数设置的背景?
离线rqzrqh

只看该作者 2楼 发表于: 2009-05-20
void QWidget::setBackgroundMode ( BackgroundMode ) [虚]
以下是BackgroundMode
Qt::PaletteForeground
Qt::PaletteBackground
Qt::PaletteButton
Qt::PaletteLight
Qt::PaletteMidlight
Qt::PaletteDark
Qt::PaletteMid
Qt::PaletteText
Qt::PaletteBrightText
Qt::PaletteButtonText
Qt::PaletteBase
Qt::PaletteShadow
Qt::PaletteHighlight
Qt::PaletteHighlightedText
Qt::NoBackground - 窗口部件在paintEvent()之前不被清空。如果窗口部件的绘画事件一直在所有的像素上绘画,使用这个模式既会很快也会没有闪烁。
Qt::FixedColor - 窗口部件被一个固定的颜色清空,通常情况下不同于paletter()中的那些。使用setPaletteBackgroundColor()来设置。
Qt::FixedPixmap - 窗口部件被一个固定的像素映射清空,通常情况下不同于paletter()中的那些。使用setPaletteBackgroundPixmap()来设置。
Qt::PaletteLink
Qt::PaletteLinkVisited
Qt::X11ParentRelative - (仅供内部使用)

例:button->setBackgroundMode ( Qt::PaletteLight);
QPushButton继承自QButton,QButton继承自QWidget,最终在QWidget下找到了该操作,QT3下成功
[ 此帖被rqzrqh在2009-05-20 18:45重新编辑 ]
离线duduqq

只看该作者 3楼 发表于: 2009-05-20
子窗体的背景是继承父窗体的
离线jaypei

只看该作者 4楼 发表于: 2009-05-21
3楼说的没错

button继承了修改的背景,可以在创建button后用setPalette设置一个上层的palette,如
button->setPalette(QApplication::palette())
离线snowman_st
只看该作者 5楼 发表于: 2009-05-22
我是用qt-4.4的,用setStyleSheet(QString::fromUtf8("background-image: url(:/live_view/icon/live_view/channel_select_bg.png);"))  方法设置的widget背景,可是在这个widget上面生成的button背景都和widget一样,我想用纯色的button死活不行,用了3楼的方法,已经没有setBackgroundMode ( Qt::PaletteLight)这个函数了,我用了5楼的方法,还是没设置成功,有没有详细点的解决办法,急啊
离线duduqq

只看该作者 6楼 发表于: 2009-05-22
试试自己做个图片设上去,看看行不行,
要不就重载QPushButton,在paintEvent()里面画你要的颜色上去。
离线jaypei

只看该作者 7楼 发表于: 2009-05-22
这么用的话就是CSS没有加限定的问题了

改成
setStyleSheet(QString::fromUtf8("#id {background-image: url(:/live_view/icon/live_view/channel_select_bg.png);}"))

#id中的id是你的widget的ObjectName
离线snowman_st
只看该作者 8楼 发表于: 2009-05-22
我发现我设置widget背景时候,如果是QMainWidget用色样式表就可以设置成功,如果是QWidget类用样式表就是设置不成功,后在网上搜索也看到别人遇到这个情况,需要用setpalette方法,我用了这个方法,发现一般图片是可以的,比如颜色很丰富的,但是我需要用的背景图是个白色带透明的,用setpalette方法后,白色的成灰色的了(如果是qmainwidget就是好的),后看到有说用这个方法在不同模式下颜色是不一样的,有能解决这个问题的方法没,不胜感激!
快速回复
限100 字节
 
上一个 下一个