微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QStatusBar 删除填充

如何解决QStatusBar 删除填充

我想在完整的 QStatusBar 上添加一个彩色小部件。我添加一个带有红色背景颜色的 QLabel,但标签周围有一个填充,我无法删除

我尝试了什么:

  • setSizegripEnabled(false)
  • setStyleSheet("QStatusBar { border: 0px; padding: 0px; margin: 0px; }" "QStatusBar::item { border: 0px; padding: 0px; margin: 0px; }"
  • layout()->setContentsMargins(0,0);

Example in different Colors to differentiate areas

更新:示例代码

  QWidget *w = new QWidget;
  QHBoxLayout *layout = new QHBoxLayout;
  QStatusBar *statusBar = new QStatusBar;
  QLabel *label = new QLabel("Example");

  w->setStyleSheet("background-color: green");

  label->setStyleSheet("background-color: red");

  statusBar->addPermanentWidget(label,1);
  statusBar->layout()->setContentsMargins(0,0);
  statusBar->setSizegripEnabled(false);

  setStatusBar(statusBar);

  w->setLayout(layout);
  setCentralWidget(w);
}

解决方法

我认为没有指针攻击或重新实现所有 QStatusBar 功能是不可能的,因为 QStatusBar 实现基于 pimpl idiom,这意味着隐藏在 QStatusBar 小部件和子小部件之间的私有标题和边框中的一些实现是硬编码在 qstatusbar.cpp

QRect ir = item->w->geometry().adjusted(-2,-1,2,1);
...
QStyleOption opt(0);
opt.rect = ir;
...
style()->drawPrimitive(QStyle::PE_FrameStatusBarItem,&opt,&p,item->w);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。