Qt QStatusBar移除填充

Qt QStatusBar移除填充,qt,qtstylesheets,qstatusbar,Qt,Qtstylesheets,Qstatusbar,我想在整个QStatusBar上添加一个彩色小部件。我添加了一个背景颜色为红色的QLabel,但标签周围有一个填充,我无法删除 我尝试的是: SetSizeGriped(错误) setStyleSheet(“QStatusBar{border:0px;padding:0px;margin:0px;}” “QStatusBar::项{边框:0px;填充:0px;边距:0px;}” 布局()->setContentsMargins(0,0,0,0) 更新:示例代码: QWidget *w

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

我尝试的是:

  • SetSizeGriped(错误)
  • setStyleSheet(“QStatusBar{border:0px;padding:0px;margin:0px;}” “QStatusBar::项{边框:0px;填充:0px;边距:0px;}”
  • 布局()->setContentsMargins(0,0,0,0)

更新:示例代码:

  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, 0, 0);
  statusBar->setSizeGripEnabled(false);

  setStatusBar(statusBar);

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

我认为如果没有指针攻击或重新实现所有QStatusBar功能,这是不可能的,因为
QStatusBar
实现基于pimpl习惯用法,这意味着一些隐藏在
QStatusBar
小部件和子小部件之间的私有头和边界中的实现是硬编码的


请准备一个。@scopchanov我用一个示例代码更新帖子谢谢你的回答。你说的指针黑客是什么意思?有没有可能给出这个问题的解决方案?很抱歉,我是Qt新手。指针黑客是使用指针算术访问私人成员的方法,这通常是个坏主意,你会得到讨厌的答案如果有人更改qt库中的私有标题,则会出现“untime”错误。实现此目标的另一种方法是:完全删除(隐藏)状态栏,然后添加带有标签的QHBoxLayout,标签的作用类似于状态栏,并将其拉伸设置为0(或者实现与状态栏基本相同的状态栏版本)
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);