QT_无边框窗口拖动缩放-创新互联

    public:
int countFlag(QPoint p, int row);
void setCursorType(int flag);
int countRow(QPoint p);

protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
bool _isleftpressed;
int _curpos;
        QPoint _plast;
//构造this->setMouseTracking(true);
_isleftpressed= false;
_curpos= 0;//标记鼠标左击时的位置this->setMinimumSize(600, 400);//设置最小尺寸
 void my_window::mousePressEvent(QMouseEvent *event)
    {
if (event->button() == Qt::LeftButton)
        {
this->_isleftpressed = true;
            QPoint temp= event->globalPos();
            _plast= temp;
            _curpos= countFlag(event->pos(), countRow(event->pos()));
event->ignore();
        }
    }

void my_window::mouseReleaseEvent(QMouseEvent *event)
    {
if (_isleftpressed)
            _isleftpressed= false;
        setCursor(Qt::ArrowCursor);
event->ignore();
    }

void my_window::mouseDoubleClickEvent(QMouseEvent *event)
    {
if (event->button() == Qt::LeftButton)
        {
if (windowState() != Qt::WindowFullScreen)
                setWindowState(Qt::WindowFullScreen);
else setWindowState(Qt::WindowNoState);//恢复正常模式        }
event->ignore();
    }

void my_window::mouseMoveEvent(QMouseEvent *event)//鼠标移动事件    {

int poss = countFlag(event->pos(), countRow(event->pos()));
        setCursorType(poss);
if (_isleftpressed)//是否左击        {
            QPoint ptemp= event->globalPos();
            ptemp= ptemp - _plast;
if (_curpos == 22)//移动窗口            {
                ptemp= ptemp + pos();
                move(ptemp);
            }
else
            {
                QRect wid= geometry();
switch (_curpos)//改变窗口的大小                {

case 11:wid.setTopLeft(wid.topLeft() + ptemp); break;//左上角  case 13:wid.setTopRight(wid.topRight() + ptemp); break;//右上角  case 31:wid.setBottomLeft(wid.bottomLeft() + ptemp); break;//左下角  case 33:wid.setBottomRight(wid.bottomRight() + ptemp); break;//右下角  case 12:wid.setTop(wid.top() + ptemp.y()); break;//中上角  case 21:wid.setLeft(wid.left() + ptemp.x()); break;//中左角  case 23:wid.setRight(wid.right() + ptemp.x()); break;//中右角  case 32:wid.setBottom(wid.bottom() + ptemp.y()); break;//中下角                }
                setGeometry(wid);
            }

            _plast= event->globalPos();//更新位置        }
event->ignore();
    }



int my_window::countFlag(QPoint p, int row)//计算鼠标在哪一列和哪一行    {
if (p.y()this->height() - MARGIN)
return 30 + row;
else return 20 + row;
    }

void my_window::setCursorType(int flag)//根据鼠标所在位置改变鼠标指针形状    {
        Qt::CursorShape cursor;
switch (flag)
        {
case 11:
case 33:
            cursor= Qt::SizeFDiagCursor; break;
case 13:
case 31:
            cursor= Qt::SizeBDiagCursor; break;
case 21:
case 23:
            cursor= Qt::SizeHorCursor; break;
case 12:
case 32:
            cursor= Qt::SizeVerCursor; break;
case 22:
//cursor = Qt::OpenHandCursor; break;            cursor = Qt::ArrowCursor; break;
default:
            cursor= Qt::ArrowCursor; break;
break;

        }
        setCursor(cursor);
    }

int my_window::countRow(QPoint p)//计算在哪一列    {
return (p.x()(this->width() - MARGIN) ? 3 : 2);
    }

网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都网站设计、成都网站建设收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了十载的创新互联网站建设公司。
分享名称:QT_无边框窗口拖动缩放-创新互联
文章起源:http://pwwzsj.com/article/djsgdg.html