QPushButton 在另一个小部件的顶部对齐
QPushButton alignment on top another widget
我有一个 QListWidget
和一个清除 QListWidget
的 QPushButton
。现在我的按钮在 QListWidget
旁边,留下尴尬的空白 space。
我想将按钮放在 QListWidget
上方,这样就可以覆盖右下角。
我试过像这样放置按钮
QPushButton* button = new QPushButton(ui->listwidget);
button->show();
它确实在我的小部件上创建了一个 "floating" 按钮,但我似乎找不到正确放置它的方法。也许我可以通过反复试验找到正确的坐标,但问题是我的 main window 是可调整大小的,所以我不希望按钮最终出现在列表中间或完全不在视图中.
有人有比这更好的主意吗?
这应该是可行的,但我不确定您会喜欢它带来的麻烦或最终结果。但简而言之...
创建 QPushButton
并以您的 window 作为父级(我假设 QListWidget
在 window 或其他容器 QWidget
中具有您提到的布局)。无论父窗口小部件是什么,这将是您按钮位置坐标的参考框架。
然后您需要使用 QWidget::pos
定位您的按钮。诀窍在于何时何地。
由于位置是相对于父级的,因此您需要使用 QWidget::size()
, subtract your button's width and height (QWidget::frameSize()
) 获取父级的内部宽度和高度,并相应地设置新位置。
您需要为父窗口小部件的每个调整大小事件执行此操作。因此,一种方法是在您的父 window 中重新实现 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
我有一个 QListWidget
和一个清除 QListWidget
的 QPushButton
。现在我的按钮在 QListWidget
旁边,留下尴尬的空白 space。
我想将按钮放在 QListWidget
上方,这样就可以覆盖右下角。
我试过像这样放置按钮
QPushButton* button = new QPushButton(ui->listwidget);
button->show();
它确实在我的小部件上创建了一个 "floating" 按钮,但我似乎找不到正确放置它的方法。也许我可以通过反复试验找到正确的坐标,但问题是我的 main window 是可调整大小的,所以我不希望按钮最终出现在列表中间或完全不在视图中.
有人有比这更好的主意吗?
这应该是可行的,但我不确定您会喜欢它带来的麻烦或最终结果。但简而言之...
创建 QPushButton
并以您的 window 作为父级(我假设 QListWidget
在 window 或其他容器 QWidget
中具有您提到的布局)。无论父窗口小部件是什么,这将是您按钮位置坐标的参考框架。
然后您需要使用 QWidget::pos
定位您的按钮。诀窍在于何时何地。
由于位置是相对于父级的,因此您需要使用 QWidget::size()
, subtract your button's width and height (QWidget::frameSize()
) 获取父级的内部宽度和高度,并相应地设置新位置。
您需要为父窗口小部件的每个调整大小事件执行此操作。因此,一种方法是在您的父 window 中重新实现 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