私は QTCreator を使用しており、QWidget を作成してから、タイトル バーを で非表示にしました setWindowFlags(Qt::CustomizeWindowHint);
。
しかし、ウィジェットを選択または移動できません。mouseEvent を使用してそれを解決するにはどうすればよいですか?
私は QTCreator を使用しており、QWidget を作成してから、タイトル バーを で非表示にしました setWindowFlags(Qt::CustomizeWindowHint);
。
しかし、ウィジェットを選択または移動できません。mouseEvent を使用してそれを解決するにはどうすればよいですか?
(マウスボタンを押したまま)クリックしてドラッグするだけでウィンドウを画面上で移動できるようにする場合は、次の簡単な方法があります。
#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
マウスが移動した距離を計算し、その量だけウィジェットの位置を更新します。
マウストラッキングを有効にしている場合は、マウスボタンが実際に押されたときにのみウィンドウを移動するロジックを追加する必要があることに注意してください。(デフォルトであるマウストラッキングが無効になっている場合、mouseMoveEvent
sはボタンが押されているときにのみ生成されます)。