CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent, nullptr, Qt::WStyle_Customize | Qt::WStyle_NoBorder | Qt::WType_TopLevel) {
imgExitRect = QRect(80, 100, 20, 20);
minRect = QRect(180, 100, 20, 20);
setBackgroundMode(Qt::NoBackground);
dragging = false;
setMouseTracking(true);
}
void CustomWidget::mouseMoveEvent(QMouseEvent* event) {
QPoint globalPos = event->globalPos();
if (dragging) {
move(globalPos - dragOffset);
update();
}
}
void CustomWidget::mousePressEvent(QMouseEvent* event) {
if (event->button() == Qt::LeftButton) {
QPoint globalPos = event->globalPos();
QPoint localPos = event->pos();
QRect rect(0, 0, width(), height());
if (rect.contains(localPos)) { // 允许拖动
dragging = true;
dragOffset = globalPos - pos(); // 使用全局坐标和窗口的全局位置计算偏移
}
}
}
CustomWidget::~CustomWidget() {}
void CustomWidget::mouseReleaseEvent(QMouseEvent* event) {
if (event->button() == Qt::LeftButton) {
dragging = false;
resizing = false;
}
update();
}
以上是最小代码实现拖动,并且可以定义哪些区域可以拖动,修改rect范围QRect rect(0, 0, width(), height());即可
1949

被折叠的 条评论
为什么被折叠?



