我想保持我的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);
它工作没有崩溃,但我不满意,因为移动不顺畅.
最佳答案 这应该顺利帮助左上角..但你需要添加一些更多的条件,让它适用于所有四个方面.
posX和posY是成员变量.
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()));
}
}
为了更优雅地考虑将QVariantAnimation与QRect和setGeometry()一起使用.