Qt无法提供实时“正在拖动窗口”的事件

时间:2013-10-16 21:15:45

标签: qt

这是一个看似无辜的简单任务。小窗口小窗口。每当它被拖动到桌面上时(通过用鼠标捕捉标题栏并移动它),它应该在移动过程中打印出它的X和Y位置 IN REAL TIME。

听起来很简单,但似乎在Qt中这样做是不可能的。

无论我做什么,当我抓住标题并移动窗口时,我都无法获得实时事件。我有一个事件过滤器,但在拖动过程中只有零星的少数事件进入 - moveEvents等只有在我释放鼠标按钮之后。我需要每个移动像素的实时事件(或者至少每次窗口实际上在屏幕上移动时,尽可能接近实时)

如果没有在操作系统中钻洞,有没有办法做到这一点?

我在Mac上使用Qt。

1 个答案:

答案 0 :(得分:0)

这是我首先想到的。此解决方案不提供实时事件处理,但我认为它非常接近。如果您将窗口移动得足够慢,则可以按像素精度捕捉移动。好的,现在实现(我相信代码解释了它是如何工作的):

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = 0) : QWidget(parent)
    {
        m_timer.setInterval(1);
        connect(&m_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
        m_timer.start();
    }

private slots:
    void onTimer()
    {
        if (m_lastPos != pos()) {
            // Window moved. 
            m_lastPos = pos();
            qDebug() << "Moved to:" << m_lastPos;
        }
    }

private:
    QPoint m_lastPos;
    QTimer m_timer;
};