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://m.jcarcd.cn/article/djsgdg.html