您现在的位置是:首页 > 技术文章网站首页技术文章
[Qt]自定义窗体
Qt的自定义窗体制作
Dialog.h
#include <QPoint> //坐标点 #include <QMouseEvent> //鼠标事件 #include <QBitmap> //窗口绘制 #include <QPainter> //窗口绘制 protected: void mousePressEvent(QMouseEvent *e);//重写鼠标按下事件 void mouseReleaseEvent(QMouseEvent *);//重写鼠标释放事件 void mouseMoveEvent(QMouseEvent *e);//重写鼠标移动事件 void enterEvent(QEvent *); //重写鼠标进入事件 void leaveEvent(QEvent *); //重写鼠标离开事件 private: QPoint m_beginPos;//用来记录鼠标的按下的开始位置 bool m_press;//用来记录鼠标是否处于按下状态AA
Dialog.cpp
this->setWindowFlags(Qt::FramelessWindowHint); //设置窗体无边框 //setWindowModality(Qt::ApplicationModal); //阻塞其他窗口 //ui->SBButton->setFlat(true); //隐藏按钮边框 //设置关于窗体为圆角 /* QBitmap bmp(this->size()); bmp.fill(); QPainter p(&bmp); p.setPen(Qt::NoPen); p.setBrush(Qt::black); p.drawRoundedRect(bmp.rect(),20,20); setMask(bmp);*/ void Dialog::mousePressEvent(QMouseEvent *e)//鼠标按下事件 { if(e->button() == Qt::LeftButton )//鼠标左键按下 { m_press = true; m_beginPos = e->pos();//鼠标相对窗体的位置 } } void Dialog::mouseReleaseEvent(QMouseEvent *)//鼠标释放事件 { m_press = false; } void Dialog::mouseMoveEvent(QMouseEvent *e) //--鼠标移动事件 { if (m_press)//鼠标是按下状态的 { //当前鼠标相对窗体的位置-刚按下左键时的相对位置=鼠标移动的大小 //鼠标移动的大小+窗体原来的位置=窗体移动后的位置 this->move(e->pos() - m_beginPos + this->pos()); } } void Dialog::enterEvent(QEvent *) //--鼠标进入窗体范围事件 { if(this->pos().y()<=0)//鼠标进入并且已经上贴边 { move(pos().x(),0);//弹出整个窗体--x不变,y起始设为上边框 } } void Dialog::leaveEvent(QEvent *) //鼠标离开窗体范围事件 { if(this->pos().y()<=0)//窗体贴在屏幕上边 { move(pos().x(), 1-this->height());//贴边,其实就是只露出一点点,设置起始位置另窗体大部分不在可视区域 } }
下一篇:[Qt]信号与槽Demo
相关文章
文章评论 (0)