7

私は QTCreator を使用しており、QWidget を作成してから、タイトル バーを で非表示にしました setWindowFlags(Qt::CustomizeWindowHint);

しかし、ウィジェットを選択または移動できません。mouseEvent を使用してそれを解決するにはどうすればよいですか?

4

1 に答える 1

22

(マウスボタンを押したまま)クリックしてドラッグするだけでウィンドウを画面上で移動できるようにする場合は、次の簡単な方法があります。

#include <QtGui>

class W: public QWidget
{
    Q_OBJECT

    public:
        explicit W(QWidget *parent=0) : QWidget(parent) { }

    protected:
        void mousePressEvent(QMouseEvent *evt)
        {
            oldPos = evt->globalPos();
        }

        void mouseMoveEvent(QMouseEvent *evt)
        {
            const QPoint delta = evt->globalPos() - oldPos;
            move(x()+delta.x(), y()+delta.y());
            oldPos = evt->globalPos();
        }

    private:
        QPoint oldPos;
};

mousePressEvent、マウスがあった場所のグローバル(画面座標)位置を保存し、次に、で、mouseMoveEventマウスが移動した距離を計算し、その量だけウィジェットの位置を更新します。

マウストラッキングを有効にしている場合は、マウスボタンが実際に押されたときにのみウィンドウを移動するロジックを追加する必要があることに注意してください。(デフォルトであるマウストラッキングが無効になっている場合、mouseMoveEventsはボタンが押されているときにのみ生成されます)。

于 2012-07-03T15:53:19.313 に答える