如何让我的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);

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

这应该可以顺利地帮助左上角..但是您需要添加更多条件才能使其适用于所有四个侧面。

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()));
   }
}

要使其更加优雅,请考虑使用带有QRectsetGeometry()QVariantAnimation

相关内容

  • 没有找到相关文章

最新更新