• 4458阅读
  • 4回复

[提问]请问如何设置QStyledOptionButton的背景颜色? [复制链接]

上一主题 下一主题
离线qq2632671
 

只看楼主 倒序阅读 楼主  发表于: 2018-07-18
现在有一个表格,用于显示一组设备的状态,其中一列是设备的开关,用户可以点击控制设备的启动/停止


对于这一列,我使用了委托,应为需要按钮是显示在上面的,所以我使用了委托,继承自QStyledDelegate
  1. void ChooseWatchObjectDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
  2. {
  3.     QStyleOptionButton btn;
  4.     btn.rect = option.rect;
  5.     bool fg = index.model()->data(index).toBool();
  6.     if(fg == true)
  7.     {
  8.         btn.palette.setBrush(QPalette::Button,QBrush(QColor(Qt::green)));//无效
  9.         btn.text = tr("启动");
  10.     }
  11.     else
  12.     {
  13.         btn.palette.setBrush(QPalette::Background,QBrush(QColor(Qt::red)));//同样无效
  14.         btn.text = tr("停止");
  15.     }
  16.     btn.state |= QStyle::State_Enabled;
  17.     if(option.widget != NULL)
  18.         QApplication::style()->drawControl(QStyle::CE_PushButton,&btn,painter);
  19.     else
  20.         option.widget->style();
  21. }

这里没有使用createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index)函数,应为这个函数生产的按钮只有用户双击后才会显示,而我需要向上图那样,按钮直接在表格上
然后我希望表格上的按钮可以有个背景颜色,但我各种方法都试过了,始终没有改变这个QStyledOptionButton的背景颜色,我想问下有没有改这个背景颜色的办法,最好有代码
离线qq2632671

只看该作者 1楼 发表于: 2018-07-18
我有考虑过使用图片来替代这个按钮,单应为按钮点击是有会有凹凸变化,而图片没办法做到这点,所以用图片替代按钮的方案被领导否定了
离线qq2632671

只看该作者 2楼 发表于: 2018-07-19
貌似这个问题很那。。CSDN也没人知道
离线cluckly

只看该作者 3楼 发表于: 2018-07-20
试试:
button->setFlat(true);
button->setAutoFillBackground(true);    
button->setPalette(palette);
离线jecsoncjx

只看该作者 4楼 发表于: 07-10
大佬,解决了吗?我和您走到一条路上 被卡住了
快速回复
限100 字节
 
上一个 下一个