您现在的位置是:首页 > 技术文章网站首页技术文章

[Qt]自定义窗体

  • WangYe
  • 2020-09-26 08:33:10
  • 183 次阅读
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);
Devid.clear();*/

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());//贴边,其实就是只露出一点点,设置起始位置另窗体大部分不在可视区域
    }
}


TAG: Qt 自定义

文章评论 (0)



Top