• 6226阅读
  • 8回复

[提问]自定义Widget可以应用StyleSheet吗? [复制链接]

上一主题 下一主题
离线cjcxjstc
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-20
我从QWidget派生了QMyWidget,但在qss文件中指定:
QMyWidget
{
   background-color:red;
}
没有效果,难道StyleSheet不能应用于自定义类?
离线wxj120bw

只看该作者 1楼 发表于: 2011-09-20
回 楼主(cjcxjstc) 的帖子
看setObjectName函数手册
离线roywillow

只看该作者 2楼 发表于: 2011-09-20
应该是没效果的
我记得好像可以在paintEvent中加上两句,然后就能绘制了,但是找不到在哪见的了……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线cjcxjstc

只看该作者 3楼 发表于: 2011-09-21
roywillow,有找到吗?
离线cjcxjstc

只看该作者 4楼 发表于: 2011-09-21
setObjectName?设置了之后呢?难道是
QMyWidget#XXXXXXX
{
   background-color:red;
}

或者

QWidget#XXXXXXX
{
   background-color:red;
}

都不行的!
离线ifantasy
只看该作者 5楼 发表于: 2011-09-21
QWidget


Supports only the background, background-clip and background-origin properties.
If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:

复制代码
void CustomWidget::paintEvent(QPaintEvent *)
{
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

  The above code is a no-operation if there is no stylesheet set.
Warning: Make sure you define the Q_OBJECT macro for your custom widget.

离线ifantasy
只看该作者 6楼 发表于: 2011-09-21
把我上面的paintEvent函数加进去就可以了
void QMyWidget::paintEvent(QPaintEvent *)
{
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

离线cjcxjstc

只看该作者 7楼 发表于: 2011-09-21
好的,我试试
离线cjcxjstc

只看该作者 8楼 发表于: 2011-09-21
能够成功!!谢谢
快速回复
限100 字节
 
上一个 下一个