-1

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

我尝试了什么:

  • setSizeGripEnabled(假)
  • setStyleSheet("QStatusBar {border: 0px; padding: 0px; margin: 0px; }" "QStatusBar::item {border: 0px; padding: 0px; margin: 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);
}
4

1 回答 1

1

我认为没有指针黑客或重新实现所有 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);
于 2020-12-21T22:07:03.260 回答