目录
原理
在QDialog和QWidget中一般使用重写:
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
这3个函数就可以自定义窗口的放大的和缩小!
这里不要忘记设置
setMouseTracking(true);
这个属性!
在QMainWindow中,可以利用状态栏的特点,进行放大和缩小!
原理是,状态栏存在这样的一个东西,可以对窗口进行设置:
下面那个小三角形,即可完成窗体放缩!
这里可以重写
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
让其更加的明显!
截图如下:
程序运行截图如下:
关键代码
关键源码如下:
变量:
bool m_isDragging;
QPoint m_startPosition;
QPoint m_framePosition;
参数初始化:
m_isDragging = false;
cpp文件:
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(Qt::white));
painter.setPen(Qt::black);
QRect rect = this->rect();
rect.setWidth(rect.width() - 1);
rect.setHeight(rect.height() - 1);
painter.drawRoundedRect(rect, 30, 30);
painter.setPen(Qt::red);
painter.drawPixmap(rect.width() - LABLESIZE16, rect.height() - LABLESIZE16
, QPixmap(":/img/dot_blue.png").scaled(LABLESIZE16, LABLESIZE16));
QMainWindow::paintEvent(event);
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton){
if(m_isDragging){
QPoint delta = event->globalPos() - m_startPosition;
move(m_framePosition + delta);
}
}
QMainWindow::mouseMoveEvent(event);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton){
m_isDragging = true;
m_startPosition = event->globalPos();
m_framePosition = frameGeometry().topLeft();
}
QMainWindow::mousePressEvent(event);
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
m_isDragging = false;
QMainWindow::mouseReleaseEvent(event);
}