QPushButton 在另一个小部件上对齐

Posted

技术标签:

【中文标题】QPushButton 在另一个小部件上对齐【英文标题】:QPushButton alignment on top another widget 【发布时间】:2017-12-20 14:43:04 【问题描述】:

我有一个QListWidget 和一个QPushButton 可以清除QListWidget。现在我的按钮在QListWidget 旁边留下尴尬的空白空间。

我想将按钮放在QListWidget 上,这样就可以覆盖右下角。

我试着像这样放置按钮

 QPushButton* button = new QPushButton(ui->listwidget);
 button->show();

它确实在我的小部件上创建了一个“浮动”按钮,但我似乎找不到正确放置它的方法。也许我可以通过反复试验找到正确的坐标,但问题是我的主窗口是可调整大小的,所以我不希望按钮出现在列表中间或完全不在视图中。

还有比这更好的主意吗?

【问题讨论】:

你没有使用任何布局吗? @TCouch 我很好,这留下了这个尴尬的空白区域。我将按钮放在列表下方,等于按钮高度的整个条带是空的,而按钮只占用了一点空间。 看截图可能对我们有用 当然@TCouch!我不得不隐藏数据,所以它看起来有点奇怪,但我希望它能够传递信息。 【参考方案1】:

这应该是可能的,虽然我不确定你会喜欢它有多少麻烦或最终结果。但简而言之...

使用您的窗口作为父窗口创建QPushButton(我假设QListWidget 位于窗口或具有您提到的布局的其他容器QWidget 内)。无论父小部件是什么,它都是您按钮位置坐标的参考框架。

然后,您需要将按钮定位到QWidget::pos。诀窍在于何时何地。

由于位置是相对于父级的,您需要使用QWidget::size() 获取父级的内部宽度和高度,减去按钮的宽度和高度 (QWidget::frameSize()),并相应地设置新位置。

您需要为父窗口小部件的每个调整大小事件执行此操作。因此,一种方法是在您的父窗口中重新实现QWidget::resizeEvent(),并从那里定位按钮。

这未经测试...

QPushButton* button = new QPushButton(this);  // parent is current QWidget
button->show();
...
void MyWidget::resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE

  QSize btnSize = button->frameSize();
  QSize containerSize = this->size();
  int newX = containerSize.width() - btnSize.width() - 10;  // 10 is arbitrary margin
  int newY = containerSize.height() - btnSize.height() - 10;
  // position the button
  button->move(newX, newY);
  // call the superclass handler: substitute the actual superclass here
  QWidget::resizeEvent(event);  

您很可能需要进一步调整,也许相当多,但这应该是一般的想法。关键是在每次调整父项大小时重新定位按钮,包括最初显示的时间。

HTH

【讨论】:

以上是关于QPushButton 在另一个小部件上对齐的主要内容,如果未能解决你的问题,请参考以下文章

在多个小部件上显示相同的 QPushButton

在 QPushButton 上调用另一个小部件应用程序

当 QProgressBar 存在时如何居中对齐 QPushButton?

QPushButton 更改同一布局中其他小部件的边距

PyQt4:使用 QPushButton 小部件从 QList 小部件中删除项目

怎样设置Qpushbutton 的大小