網站怎么做來賣東西南昌seo網站排名
1.概要
創(chuàng)建一個矩形,當鼠標進入這個矩形的時候,這個矩形邊線變色,且鼠標變成手型
2.代碼
#include <QApplication>
#include "customRectWidget.h"
/** qt 6.7版, 創(chuàng)建一個矩形,當鼠標進入這個矩形的時候,這個矩形邊線變色,* 且鼠標變成手型,且這時候按下鼠標,鼠標可以上下拖動這個矩形,* 當鼠標松開的時候停止移動,但鼠標離開矩形的時候,矩形顏色恢復,完整代碼舉例;* 強調一下,鼠標進入矩形內,顏色變化,鼠標變成手型,不是鼠標進入矩形所在的控件就有上述變化。
*/
int main(int argc, char *argv[]) {QApplication app(argc, argv);CustomRectWidget widget;widget.show();return app.exec();
}
#ifndef CUSTOMRECTWIDGET_H
#define CUSTOMRECTWIDGET_H#include <QWidget>
#include <QMouseEvent>class CustomRectWidget : public QWidget {Q_OBJECTpublic:explicit CustomRectWidget(QWidget *parent = nullptr);protected:void paintEvent(QPaintEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;void enterEvent(QEnterEvent *event) override;void leaveEvent(QEvent *event) override;void setIsChange(const QPoint &mousePos);
private:QRect rect;bool dragging;QPoint dragStartPoint;QColor hoverColor;QColor normalColor;bool isChange;bool isMouseInsideRect(const QPoint &mousePos) const;
};#endif // CUSTOMRECTWIDGET_H
?
#include "customRectWidget.h"
#include <QPainter>
#include <QCursor>
#include <QDebug>CustomRectWidget::CustomRectWidget(QWidget *parent): QWidget(parent), rect(50, 50, 200, 100), dragging(false), hoverColor(Qt::red), normalColor(Qt::black) {setFixedSize(300, 300);// 啟用鼠標追蹤,以便在鼠標沒有按下時也能接收mouseMoveEventsetMouseTracking(true);
}void CustomRectWidget::setIsChange(const QPoint &mousePos){bool value = isMouseInsideRect(mousePos);if(value==isChange){return;}update();isChange = value;
}void CustomRectWidget::paintEvent(QPaintEvent *event) {Q_UNUSED(event)QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);QColor borderColor = normalColor;if (isMouseInsideRect(mapFromGlobal(QCursor::pos()))) {borderColor = hoverColor;}painter.setPen(QPen(borderColor, 3));painter.setBrush(Qt::white);painter.drawRect(rect);
}void CustomRectWidget::mousePressEvent(QMouseEvent *event) {setIsChange(event->pos());if (isMouseInsideRect(event->pos())) {dragging = true;dragStartPoint = event->pos();}
}void CustomRectWidget::mouseMoveEvent(QMouseEvent *event) {setIsChange(event->pos());if (dragging && isMouseInsideRect(dragStartPoint)) {int dy = event->pos().y() - dragStartPoint.y();rect.moveTop(rect.top() + dy);dragStartPoint = event->pos();update(); // Trigger repaint with new position}
}void CustomRectWidget::mouseReleaseEvent(QMouseEvent *event) {Q_UNUSED(event)dragging = false;
}void CustomRectWidget::enterEvent(QEnterEvent *event) {Q_UNUSED(event)// We manually set the cursor in the mouseMoveEvent based on the rect position
}void CustomRectWidget::leaveEvent(QEvent *event) {Q_UNUSED(event)// Cursor will be reset to default when leaving the widget
}bool CustomRectWidget::isMouseInsideRect(const QPoint &mousePos) const {bool ret = rect.contains(mousePos);if(ret) {qDebug()<<"in";}else{qDebug()<<"not in";}return ret;
}