qt自带的标题栏在多个平台都显示的不一样,而且在常用的window平台也非常的不好看,所以我们经常会用到的美化方式就是会取消标题栏的显示,但是取消标题栏的显示就会出现一个问题就是无法实现窗口的移动,所以这里给出一个方法实现左键按压窗口控件任意地方来实现窗口的移动,下面我们直接看代码和使用方法即可。
// 窗体移动方法重载eventFilter函数 bool Widget::eventFilter(QObject *watched, QEvent *evt) { static QPoint mousePoint; static bool mousePressed = false; QMouseEvent *event = static_cast<QMouseEvent *>(evt); if (event->type() == QEvent::MouseButtonPress) { if (event->button() == Qt::LeftButton) { mousePressed = true; // 左击事件跟随鼠标移动窗口位置 mousePoint = event->globalPos() - this->pos(); return true; } else { // exit(0);// 右击事件直接退出程序 } } else if (event->type() == QEvent::MouseButtonRelease) { mousePressed = false; return true; } else if (event->type() == QEvent::MouseMove) { if (mousePressed && (event->buttons() && Qt::LeftButton)) { this->move(event->globalPos() - mousePoint); return true; } } return QWidget::eventFilter(watched, event); }
使用方法:将最大的窗口重载上我们写的方法上面就可以了
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);//取消标题栏的显示 ui->tabWidget->installEventFilter(this);// 重载主窗口控件的eventfilter方法来实现移动。