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

时间:2015-12-10 04:55:12

标签: qt qmainwindow

我希望将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);

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

1 个答案:

答案 0 :(得分:2)

这应该可以顺利帮助左上角..但是你需要增加一些条件才能让它适用于所有四个方面。

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()一起使用。