0

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

听起来很简单,但在 Qt 中似乎不可能做到这一点。

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

有没有办法在不钻操作系统的情况下做到这一点?

我在 Mac 上使用 Qt。

4

1 回答 1

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;
};
于 2013-10-17T07:05:03.917 回答