这是一个看似无辜的简单任务。小窗口小窗口。每当它被拖动到桌面上时(通过用鼠标捕捉标题栏并移动它),它应该在移动过程中打印出它的X和Y位置 IN REAL TIME。。
听起来很简单,但似乎在Qt中这样做是不可能的。
无论我做什么,当我抓住标题并移动窗口时,我都无法获得实时事件。我有一个事件过滤器,但在拖动过程中只有零星的少数事件进入 - moveEvents等只有在我释放鼠标按钮之后。我需要每个移动像素的实时事件(或者至少每次窗口实际上在屏幕上移动时,尽可能接近实时)
如果没有在操作系统中钻洞,有没有办法做到这一点?
我在Mac上使用Qt。
答案 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;
};