Qt 使用半透明树形控件,并且可以拖动

1.效果展示

在一个窗口上添加一个浮动的半透明树形编辑框,并且可以拖动这个这个树形编辑框,双击透明界面关闭,先看效果:
在这里插入图片描述

2.自定义一个树形控件

#pragma once

#include <QTreeWidget>
#include <QPoint>

//计算结果输出树

class QWidget;

class PrintCalResultTree : public QTreeWidget {
	Q_OBJECT

public:
	PrintCalResultTree(QWidget *parent);
	~PrintCalResultTree();

	void setParentTitleHeight(int h);

	void mousePressEvent(QMouseEvent *event)override;
	void mouseMoveEvent(QMouseEvent *event)override;
	void mouseDoubleClickEvent(QMouseEvent *event)override;

private:
	QWidget* _parentWgt = nullptr;
	int _parentTitleHeight = 0;//父标题栏的高度
	QPoint _wndPos, _mousePos, _dPos, _mouseInTreePos;;
};

#include "PrintCalResultTree.h"
#include <QWidget>
#include <QMouseEvent>

PrintCalResultTree::PrintCalResultTree(QWidget *parent)
	: QTreeWidget(parent) {
	_parentWgt = parent;
	setWindowOpacity(0.5);
}

PrintCalResultTree::~PrintCalResultTree() {
}

void PrintCalResultTree::setParentTitleHeight(int h) {
	_parentTitleHeight = h;
}

void PrintCalResultTree::mousePressEvent(QMouseEvent *event) {
	_wndPos = pos();
	_mouseInTreePos = event->pos();
	_mousePos = event->globalPos();
	_dPos = _mousePos - _wndPos;

	_mouseInTreePos.setY(_mouseInTreePos.y() + _parentTitleHeight);
	QTreeWidget::mousePressEvent(event);
}

void PrintCalResultTree::mouseMoveEvent(QMouseEvent *event) {
	_mousePos = event->globalPos();
	_dPos = _mousePos - _wndPos;
	_wndPos = _wndPos + _dPos;
	_parentWgt->move(_wndPos - _mouseInTreePos);
	QTreeWidget::mouseMoveEvent(event);
}

void PrintCalResultTree::mouseDoubleClickEvent(QMouseEvent *event) {
	_parentWgt->hide();
	QTreeWidget::mouseDoubleClickEvent(event);
}


3.自定义一个QDialog并且添加这个树形控件

#pragma once

#include <QDialog>
#include "ui_QtGuiPrintResult.h"

class QMouseEvent;
class PrintCalResultTree;

class QtGuiPrintResult : public QDialog {
	Q_OBJECT

public:
	QtGuiPrintResult(QWidget *parent = Q_NULLPTR);
	~QtGuiPrintResult();

private:
	void init();

	void mousePressEvent(QMouseEvent *event)override;
	void mouseMoveEvent(QMouseEvent *event)override;
private:
	Ui::QtGuiPrintResult ui;

	PrintCalResultTree* _printCalResultTree = nullptr;
	QPoint _wndPos, _mousePos, _dPos;
};

#include "QtGuiPrintResult.h"
#include <QMouseEvent>
#include "PrintCalResultTree.h"

QtGuiPrintResult::QtGuiPrintResult(QWidget *parent)
	: QDialog(parent) {
	ui.setupUi(this);
	init();
}

QtGuiPrintResult::~QtGuiPrintResult() {

}

void QtGuiPrintResult::init() {
	int titleHeight = style()->pixelMetric(QStyle::PM_TitleBarHeight);

	_printCalResultTree =(PrintCalResultTree*) ui.treeWidget;
	_printCalResultTree->setParentTitleHeight(titleHeight);
	setWindowOpacity(0.5);//设置透明度
	setWindowFlag(Qt::FramelessWindowHint);//去掉边框
}

void QtGuiPrintResult::mousePressEvent(QMouseEvent *event) {
	_wndPos = pos();
	_mousePos = event->globalPos();
	_dPos = _mousePos - _wndPos;
}

void QtGuiPrintResult::mouseMoveEvent(QMouseEvent *event) {
	move(event->globalPos() - _dPos);
}

4.界面

布局界面,并且提升QTreeWidget
在这里插入图片描述

5.调用

void MoveChildWgt::slotOpenChild() {
	if (_guiPrintResult == nullptr){
		_guiPrintResult = new QtGuiPrintResult(this);
	}
	_guiPrintResult->exec();
}

源码下载

aaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值