Qt学习之路之无边窗口的移动

实现无边窗口的移动,笔者也迷惑不解了一段时间。下面给出一个例子,实现无边窗口的移动。

move_widget.h

#pragma once
#include <QWidget>
#include <QLineEdit>
#include <windows.h>
#include <WindowsX.h>

class LineWidget : public QWidget
{
	Q_OBJECT
public:
	explicit LineWidget(QWidget *parent = 0);

protected:
	bool nativeEvent(const QByteArray &eventType, void *message, long *result);

private:
	QLineEdit *lineEdit;
};

move_widget.cpp

#include "line_widget.h"

LineWidget::LineWidget(QWidget *parent /*= 0*/) : QWidget(parent)
{
	//---lineEdit 控件
	lineEdit = new QLineEdit(this);
	lineEdit->setMaxLength(8);
	lineEdit->setGeometry(30, 15, 100, 20);

	//---指定窗口大小
	resize(300, 60);

	//--设置无边窗口
	setWindowFlags(Qt::FramelessWindowHint);
}

/*
	函数名:nativeEvent
	函数参数:const QByteArray &eventType, void *message, long *result
	函数返回值:  true/ false
*/
//-----窗口移动
bool LineWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
	MSG* msg = reinterpret_cast<MSG*>(message);
	switch (msg->message)
	{
	case WM_NCHITTEST:
		int xPos = GET_X_LPARAM(msg->lParam) - this->pos().x();
		int yPos = GET_Y_LPARAM(msg->lParam) - this->pos().y();
		int iCri = 10;														//--------------------- int critical 临界值
		//---------------------------------------------------------------------- 移动窗体
		if (this->childAt(xPos, yPos) == 0)					// ---------------------child at 判断当前鼠标是否位于控件
		{
			*result = HTCAPTION;
		}
		else
		{
			return false;
		}
		return true;
	}
	return false;
}


说明: 笔者的这个 实现,必须包含2个头文件:

#include <windows.h>
#include <WindowsX.h>


上面的这个例子中,实现窗口移动的函数是:

bool nativeEvent(const QByteArray &eventType, void *message, long *result);


就是这样啦~~~~~

      赶紧试试试试呗~~~~



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值