我有DefaultSqlSession
和QListWidget
清除QPushButton
。现在我的按钮位于QListWidget
旁边,留下了尴尬的空白空间。
我想将按钮放在QListWidget
上,以便覆盖右下角。
我尝试按下这样的按钮
QListWidget
它确实创造了一个"浮动"按下我的小部件,但我似乎无法找到正确放置它的方法。也许我可以通过试验和错误找到合适的cooridantes,但问题是我的主窗口是可调整大小的,所以我不希望按钮最终位于列表中间或者在视图之外。 / p>
有人有比这更好的想法吗?
答案 0 :(得分:2)
这应该是可能的,虽然我不确定你会想要多少麻烦或最终结果。但简而言之......
使用您的窗口作为父窗口创建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