Qt取消边框,处理常见的事件
1.处理移动窗口和拉伸窗口机制
class MyMidArea : public QWidget
{
Q_OBJECT
public:
explicit MyMidArea(QList<QPair<int,QString>> id_name,QList<QList<Line>> data,QWidget *parent = nullptr);
signals:
protected:
QRegion createRoundedMask(const QSize &size, int radius) {
QRegion mask;
mask = QRegion(0, 0, size.width(), size.height(), QRegion::Rectangle);
mask -= QRegion(0, 0, radius, radius, QRegion::Ellipse);
mask -= QRegion(0, size.height() - radius, radius, radius, QRegion::Ellipse);
mask -= QRegion(size.width() - radius, 0, radius, radius, QRegion::Ellipse);
mask -= QRegion(size.width() - radius, size.height() - radius, radius, radius, QRegion::Ellipse);
return mask;
}
private:
QToolButton *m_p_btn_left;
QToolButton *m_p_btn_right;
myCheckWidget *m_checkWidget;
QList<QPair<int,QString>> m_id_name;
QList<QList<Line>> m_data;
qint8 m_pos = -1;
protected:
QPoint m_dragStartPosition;
bool m_isResizing = false;
bool m_isMove = false;
int m_resizeMargin = 5;
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
if (event->pos().x() < m_resizeMargin || event->pos().x() > width() - m_resizeMargin ||
event->pos().y() < m_resizeMargin || event->pos().y() > height() - m_resizeMargin) {
m_isResizing = true;
} else {
m_isMove=true;
m_dragStartPosition = event->pos();
}
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if (m_isResizing) {
resize(event->globalX() - geometry().left(), event->globalY() - geometry().top());
} else {
QPoint delta = event->pos() - m_dragStartPosition;
move(mapToGlobal(delta));
}
}
void mouseReleaseEvent(QMouseEvent *event) override {
m_isResizing = false;
if(!m_isMove)
{
this->close();
}
m_isMove = false;
}
};