Qt 如何使我的QMainWindow始终位于桌面内?

Qt 如何使我的QMainWindow始终位于桌面内?,qt,qmainwindow,Qt,Qmainwindow,我希望将我的QMainWindow始终放在桌面中,因此我添加了QMainWindow::moveEvent的实现: void MainWindow::moveEvent(QMoveEvent *ev) { if(ev->pos().x() < 0) setGeometry(0, ev->oldPos().y(), width(), height()); } void主窗口::moveEvent(QMoveEvent*ev) { 如果(ev->pos().x()oldP

我希望将我的
QMainWindow
始终放在桌面中,因此我添加了
QMainWindow::moveEvent的实现:

void MainWindow::moveEvent(QMoveEvent *ev)
{
    if(ev->pos().x() < 0) setGeometry(0, ev->oldPos().y(), width(), height());
}
void主窗口::moveEvent(QMoveEvent*ev)
{
如果(ev->pos().x()<0)设置几何体(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);
int newx=ev->pos().x(),
newy=ev->pos().y();
如果(ev->pos().x()<0)newx=0;
如果(ev->pos().y()<0)newy=0;
移动(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()));
   }
}
void主窗口::moveStep(){/[SLOT]
int movX=0,movY=0;
如果(posX<0)movX=1;
如果(posY<0)movY=1;
移动(posX+movX,posY+movY);
}
void主窗口::moveEvent(QMoveEvent*ev){
如果(ev->pos().x()<0 | ev->pos().y()<0){
posX=ev->pos().x();
posY=ev->pos().y();
QTimer::singleShot(10,this,SLOT(moveStep());
}
}

<> >让它更优雅地考虑使用<代码> qValueFrime<代码> > <代码> qReT和<代码> SETMAGTRAYY() > /P>您可能正在运行一个无限循环,因为<代码> SETSimeS/<代码>将触发另一个调用<代码> MOVENECTION/COD>。然而,我刚刚测试了这段代码,它对我来说运行良好!谢谢,我试着用
move
做了一个重要的编辑。现在它真的起作用了。。如果移动到左边的屏幕边界,窗口会平滑地移动到视图中。考虑使用这个机制来保持窗口为中心。可能会有一个很好的效果。。或者一个讨厌的人;)