gpt4 book ai didi

qt - 如何让我的 QMainWindow 始终在桌面内?

转载 作者:行者123 更新时间:2023-12-04 12:47:46 25 4
gpt4 key购买 nike

我想保留我的QMainWindow总是在桌面内部,所以我添加了 QMainWindow::moveEvent 的实现:

void MainWindow::moveEvent(QMoveEvent *ev)
{
if(ev->pos().x() < 0) setGeometry(0, ev->oldPos().y(), width(), height());
}

但是当我将窗口移到桌面左边界之外时,应用程序崩溃了。
这段代码有什么问题?为什么会崩溃?我的解决方案正确吗?

//- 更新:
我试过这个:
int newx = ev->pos().x(),
newy = ev->pos().y();
if(ev->pos().x() < 0) newx = 0;
if(ev->pos().y() < 0) newy = 0;
move(newx, newy);

它没有崩溃,但我不满意,因为移动不顺畅。

最佳答案

这应该可以顺利地帮助左上角..但是您需要添加更多条件才能使其在所有四个方面都有效。
posXposY是成员变量。

void MainWindow::moveStep() { // [SLOT]
int movX = 0, movY = 0;
if(posX < 0) movX = 1;
if(posY < 0) movY = 1;
move(posX + movX, posY + movY);
}


void MainWindow::moveEvent(QMoveEvent *ev) {

if(ev->pos().x() < 0 || ev->pos().y() < 0) {
posX = ev->pos().x();
posY = ev->pos().y();
QTimer::singleShot(10, this, SLOT(moveStep()));
}
}

为了更优雅地考虑使用 QVariantAnimationQRectsetGeometry() .

关于qt - 如何让我的 QMainWindow 始终在桌面内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com