QPushButton在顶部另一个小部件上对齐

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QPushButton在顶部另一个小部件上对齐相关的知识,希望对你有一定的参考价值。

我有一个QListWidget和一个清除QPushButtonQListWidget。现在我的按钮旁边是QListWidget,留下了尴尬的空地。

enter image description here

我想将按钮放在QListWidget上,以便覆盖右下角。

我试着像这样放置按钮

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

它确实在我的小部件上创建了一个“浮动”按钮,但我似乎无法找到正确放置它的方法。也许我可以通过试验和错误找到合适的cooridantes,但问题是我的主窗口是可调整大小的,所以我不希望按钮最终位于列表中间或者在视图之外。

有人比这更好吗?

答案

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

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

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

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

您需要为父窗口小部件的每个resize事件执行此操作。因此,一种方法是在父窗口中重新实现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

Kivy BoxLayout 将小部件与顶部边框对齐

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

将QHboxLayout的每个小部件与Pyqt中的顶部对齐

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