不带标题栏的QT4拖动窗口 [英] QT4 Drag Window Without Title Bar

查看:14
本文介绍了不带标题栏的QT4拖动窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用的应用程序有一个定制的用户界面,它要求我从主窗口中删除标题栏。不幸的是,我想不出如何才能在屏幕上移动应用程序:)

我删除标题栏的代码如下:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent, Qt::CustomizeWindowHint), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);

您知道如何使用其他小工具或主窗体窗口本身来移动窗口吗?

谢谢

推荐答案

最直观的方法是在小部件表面上单击并拖动。为了实现这一点,您需要执行一些步骤。

该方法如下:当用户在小部件内部按下时,设置一个布尔标志并存储鼠标的位置,然后在释放按钮时将其设置为False。下一步是移动小部件。在MouseMoveEvent中,检查是否设置了该标志。如果已设置,则采用鼠标的新位置。计算新位置和已存储位置之间的差值。然后,将窗口的位置设置为原始位置+计算的鼠标移动。然后存储新的鼠标位置。

所需代码如下:

警告:此代码示例不正确,在拖动窗口时将导致跳转行为。请改用Qt Shaped Clock example中的代码。

/// Header contents:
class MyWidget : public QMainWindow
{
protected:
    void mouseMoveEvent(QMouseEvent* event);
    void mousePressEvent(QMouseEvent* event);
    void mouseReleaseEvent(QMouseEvent* event);
private:
    QPoint mLastMousePosition;
    bool mMoving;
}
/// Source:
void MyWidget::mousePressEvent(QMouseEvent* event)
{
    if(event->button() == Qt::LeftButton)
    {
        mMoving = true;
        mLastMousePosition = event->pos();
    }
}

void MyWidget::mouseMoveEvent(QMouseEvent* event)
{
    if( event->buttons().testFlag(Qt::LeftButton) && mMoving)
    {
        this->move(this->pos() + (event->pos() - mLastMousePosition));
        mLastMousePosition = event->pos();
    }
}

void MyWidget::mouseReleaseEvent(QMouseEvent* event)
{
    if(event->button() == Qt::LeftButton)
    {
        mMoving = false;
    }
}

这篇关于不带标题栏的QT4拖动窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆