0

これは無害に見える単純なタスクです。小さなウィジェット ウィンドウ。デスクトップ上でドラッグするたびに (タイトルバーをマウスでキャッチして移動することにより)、X と Y の位置をリアルタイムで出力する必要があります。移動中。

簡単に聞こえますが、Qt でこれを行うことは不可能のようです。

何をしても、キャプションをキャッチしてウィンドウを移動したときのリアルタイムイベントを取得できません。私はイベント フィルターを持っていますが、ドラッグ中には散発的なイベントしか発生しません。moveEvents などは、マウス ボタンを離した後にのみ発生します。動きのピクセルごとにリアルタイムイベントが必要です(または、少なくともウィンドウが実際に画面上で移動するたびに、可能な限りリアルタイムに近い)

OSに穴を開けずにそれを行う方法はありますか?

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 に答える