关于#窗口拖动#的问题,如何解决?


void QDlgLogin::mousePressEvent(QMouseEvent* event)                  一个splash窗口
{
    if (event->button() == Qt::LeftButton)
    {
        m_moving = true;                          //鼠标按下
        m_lastPos = event->globalPos() - pos();               //鼠标上一次位置
    }
    return QDialog::mousePressEvent(event);
}

void QDlgLogin::mouseMoveEvent(QMouseEvent* event)
{
    if (m_moving && (event->button() && Qt::LeftButton) && (event->globalPos() - m_lastPos).manhattanLength() > QApplication::startDragDistance())
    {
        move(event->globalPos() - m_lastPos);
        m_lastPos = event->globalPos() - pos();
    }
    return QDialog::mouseMoveEvent(event);
}

void QDlgLogin::mouseReleaseEvent(QMouseEvent* event)
{
    m_moving = false;
}
大佬们,为什么我用鼠标不能拖动对话框窗口啊

这个,QDlgLogin类似乎是从QDialog类继承的,检查下重写这些事件处理程序的代码的类中忘记将其实例化为QDlgLogin。或在QDialog的setMouseTracking(true)方法下是否启用鼠标跟踪功能。
还有,对话框窗口被锁定而无法拖动。需要检查对话框属性是否设置为无边框、最大化、最小化以及窗口锁定等

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7797889
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:程序打包问题及解决方法汇总
  • 除此之外, 这篇博客: 远程桌面项目中的 一. 远程控制系统 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. 编译代码,生成可执行程序。注意Debug和Release的区别。
      Debug我们称调试版本,编译链接生成程序时,包含了调试信息,程序的体积比较大。
      调试程序比较方便,但是运行时,没有Release版本快。通常在开发程序时,选择Debug
      模式。
      Release我们称发布版本,编译链接生成程序时,不包含调试信息,编译器也会对代码优化,
      程序的体积比较小。由于没有调试信息,所以在调试程序时不方便,但是运行的速度快。
      通常开发完成后,生成Release版本交付用户使用。

    2. 首先启动Server端(被控端),注意设置它的屏幕分辨率为1024*768。启动后,看到Server端的IP地址。然后从client目录中查找client.ini文件,拷贝到解决方案下面的debug目录下,也就是说和client.exe同一目录下,修改该文件中的IP地址为Server端地址。启动客户端,点击 "截屏"按钮,然后在客户端就可以控制Server端了。

    3. 项目描述
      远程控制系统是一个典型的C/S架构系统,功能类似于windows自带的远程连接和QQ上
      的远程协助。具体实现时,使用的是TCP通信。TCP服务器端作为被控端首先启动,在
      指定的端口监听,等待客户端连接。TCP客户端作为控制端启动后,连接服务器。连接后,
      服务器将屏幕数据发送到客户端,在客户端的视图客户区显示;用户在客户端操作键盘或
      鼠标,产生键盘/鼠标的消息。把该消息的数据发送给服务器,服务器收到后,调用相关的
      API函数,执行键盘/鼠标的消息的处理。

  • 您还可以看一下 王剑老师的站长必修课:网站是怎样做出来的?课程中的 运营:才刚开始,站长更重要的工作…小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^