【问题标题】:QStatusBar remove paddingQStatusBar 移除填充
【发布时间】:2020-12-21 09:18:25
【问题描述】:

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

我尝试了什么:

  • setSizeGripEnabled(false)
  • setStyleSheet("QStatusBar {border: 0px; padding: 0px; margin: 0px; }" "QStatusBar::item { 边框:0px;内边距:0px;边距:0px;}"
  • layout()->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);
}

【问题讨论】:

标签: qt qtstylesheets qstatusbar


【解决方案1】:

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

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);

【讨论】:

  • 感谢您的回答。指针黑客是什么意思?是否有可能显示此问题的解决方案?对不起,我是 Qt 的新手。
  • Pointer hacking 是使用指针算法访问私有成员的方法,这通常是个坏主意,如果有人更改 qt 库中的私有头文件,您会遇到令人讨厌的运行时错误。还有另一种实现目标的方法:您可以完全删除(隐藏)状态栏,而是添加带有标签的 QHBoxLayout,其作用类似于状态栏并将其拉伸设置为 0(或实现您的状态栏版本,这本质上是相同的)跨度>
  • 如果不使用默认的 qstatusBar,那就太棒了。为什么我不这么认为?谢谢!我赞成
猜你喜欢
  • 2021-11-20
  • 2020-06-02
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多