欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Qt界面設(shè)置無邊框之后如何實(shí)現(xiàn)縮放界面-創(chuàng)新互聯(lián)

在qt中,如果設(shè)置的了窗口無邊框的話(即setWindowFlag(Qt::FramelessWindowHint);)那么窗口就沒法直接被鼠標(biāo)拖動(dòng)了,也沒法按住窗口的邊界進(jìn)行縮放。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供曲靖企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為曲靖眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

如果要實(shí)現(xiàn)縮放和拖動(dòng),一般來說就需要的重寫窗口類的mousePressEvent和mouseMoveEvent事件。

但是有些時(shí)候,比如在界面上放了一個(gè)QgraphicsView,主界面就沒法響應(yīng)mousePressEvent和mouseMoveEvent事件。因?yàn)樵撌录籕graphicsView截取了。這個(gè)時(shí)候我們就不能簡(jiǎn)單得通過的重寫主窗口的鼠標(biāo)事件來實(shí)現(xiàn)窗口的拖動(dòng)和縮放了。

我是這樣實(shí)現(xiàn)的:

如下圖所示,我在界面上放了4個(gè)qlabel,通過qlabel的raise()方法將他們置頂,這樣,這些label就能獲取到鼠標(biāo)移動(dòng)和點(diǎn)擊事件了。

但是,我們是不能直接重寫qlabel中的鼠標(biāo)事件響應(yīng)函數(shù)的,因?yàn)樵趒label中,鼠標(biāo)事件的級(jí)別是protected,如下圖:

所以這時(shí)候就需要我們自己寫一個(gè)類,繼承qlabel,代碼如下:

Mylabel.h

本文福利,莬費(fèi)領(lǐng)取Qt開發(fā)學(xué)習(xí)資料包、技術(shù)視頻,內(nèi)容包括(C++語言基礎(chǔ),Qt編程入門,QT信號(hào)與槽機(jī)制,QT界面開發(fā)-圖像繪制,QT網(wǎng)絡(luò),QT數(shù)據(jù)庫編程,QT項(xiàng)目實(shí)戰(zhàn),QT嵌入式開發(fā),Quick模塊等等)↓↓↓↓↓↓見下面↓↓文章底部點(diǎn)擊莬費(fèi)領(lǐng)取↓↓

#ifndef MYLABEL_H
#define MYLABEL_H

#include#include#include#include#includeclass myLabel:public QLabel
{
    Q_OBJECT
public:
    myLabel(QWidget *parent=nullptr);
    void setScaleCursor(int nshape = 0);
    void mousePressEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
    void mouseReleaseEvent(QMouseEvent *ev);
    QPoint m_mousePointOld;
    bool m_bKeepDrag;
signals:
    void moveEventSig(QPoint point);
    void mouseReleasedSig();
};

#endif // MYLABEL_H

Mylabel.cpp

#include "mylabel.h"

myLabel::myLabel(QWidget *parent):m_bKeepDrag(false)
{
    this->setParent(parent);
}

void myLabel::setScaleCursor(int nshape)
{
    if(nshape == 1)//左右拉伸
    {
        setCursor(Qt::SizeHorCursor);   //改變光標(biāo)形狀
    }
    else if(nshape == 2)//上下拉伸
    {
        setCursor(Qt::SizeVerCursor);
    }
    else if(nshape == 3)//右下拉伸
    {
        setCursor(Qt::SizeFDiagCursor);
    }
    else //正常顯示
    {
        setCursor(Qt::ArrowCursor);
    }

}

void myLabel::mousePressEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton)
    {
        m_bKeepDrag = true;
        m_mousePointOld = ev->globalPos();
    }
}

void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
   if(m_bKeepDrag)
   {
       const QPoint position = ev->globalPos() - m_mousePointOld; //the position of mainfrmae + (current_mouse_position - last_mouse_position)
           //move(position.x(), position.y());
       emit moveEventSig(position);
       m_mousePointOld = ev->globalPos();
   }
}

void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    m_bKeepDrag = false;
    emit mouseReleasedSig();
}

在主界面的類中主要代碼如下:
頭文件里面定義這4個(gè)label

1     myLabel          *labelLft;
2     myLabel          *labelRit;
3     myLabel          *labelBot;
4     myLabel          *labelTop;

在cpp文件的構(gòu)造函數(shù)中初始化這4個(gè)label,同時(shí)通過connect的方式建立信號(hào)槽,將label中的鼠標(biāo)移動(dòng)事件傳給主窗口,從而控制主窗口邊界的縮放

//上下左右的label,為了控制界面能夠拖動(dòng)拉伸
labelLft = new myLabel(this);
labelLft->setStyleSheet("QLabel {background-color: transparent;}");//設(shè)置背景透明
labelLft->raise();
labelLft->setScaleCursor(1);
connect(labelLft,&myLabel::moveEventSig,this,&MaxPicShowForm::getLeftScaleEvent);
labelRit = new myLabel(this);
labelRit->setStyleSheet("QLabel {background-color: transparent;}");//設(shè)置背景透明
labelRit->raise();
labelRit->setScaleCursor(1);//設(shè)置為左右拉升光標(biāo)
connect(labelRit,&myLabel::moveEventSig,this,&MaxPicShowForm::getRightScaleEvent);
labelBot = new myLabel(this);
labelBot->setStyleSheet("QLabel {background-color: transparent;}");//設(shè)置背景透明
labelBot->raise();
labelBot->setScaleCursor(2);//設(shè)置為上下拉升光標(biāo)
connect(labelBot,&myLabel::moveEventSig,this,&MaxPicShowForm::getBottomScaleEvent);
labelTop = new myLabel(this);
labelTop->setStyleSheet("QLabel {background-color: transparent;}");//設(shè)置背景透明
labelTop->setScaleCursor(2);//設(shè)置為上下拉升光標(biāo)
connect(labelTop,&myLabel::moveEventSig,this,&MaxPicShowForm::getTopScaleEvent);
labelRB = new myLabel(this);
labelRB->setStyleSheet("QLabel {background-color: transparent;}");//設(shè)置背景透明
labelRB->setScaleCursor(3);//設(shè)置為右下拉升光標(biāo)
connect(labelRB,&myLabel::moveEventSig,this,&MaxPicShowForm::getRBScaleEvent);
//設(shè)置4個(gè)label的位置:
labelLft->setGeometry(0,0,5,this->height());
labelRit->setGeometry(this->width()-5,0,5,this->height());
labelBot->setGeometry(0,this->height()-5,this->width(),5);
labelTop->setGeometry(0,0,this->width(),5);

響應(yīng)鼠標(biāo)拖動(dòng)事件:

1 void MaxPicShowForm::getLeftScaleEvent(QPoint movPoint)
 2 {
 3     if((pos().x()+movPoint.x())>(pos().x()+this->width()-200))
 4     {
 5         return;//保證拖動(dòng)窗口左邊界的時(shí)候,控件寬度至少有200
 6     }
 7     this->setGeometry(pos().x()+movPoint.x(),pos().y(),this->width()-movPoint.x(),this->height());
 8 }
 9 
10 void MaxPicShowForm::getRightScaleEvent(QPoint movPoint)
11 {
12     if((pos().x()+this->width()+movPoint.x())<(pos().x()+200))
13     {
14         return;//保證拖動(dòng)窗口右邊界的時(shí)候,控件寬度至少有200
15     }
16     this->setGeometry(pos().x(),pos().y(),this->width()+movPoint.x(),this->height());
17 }
18 
19 void MaxPicShowForm::getBottomScaleEvent(QPoint movPoint)
20 {
21     if((pos().y()+this->height()+movPoint.y())<(pos().y()+200))
22     {
23         return;//保證拖動(dòng)窗口下邊界的時(shí)候,控件高度至少有200
24     }
25     this->setGeometry(pos().x(),pos().y(),this->width(),this->height()+movPoint.y());
26 }
27 
28 void MaxPicShowForm::getTopScaleEvent(QPoint movPoint)
29 {
30     if((pos().y()+movPoint.y())>(pos().y()+this->height()-200))
31     {
32         return;//保證拖動(dòng)窗口上邊界的時(shí)候,控件高度至少有200
33     }
34     this->setGeometry(pos().x(),pos().y()+movPoint.y(),this->width(),this->height()-movPoint.y());
35 q}

本文福利,莬費(fèi)領(lǐng)取Qt開發(fā)學(xué)習(xí)資料包、技術(shù)視頻,內(nèi)容包括(C++語言基礎(chǔ),Qt編程入門,QT信號(hào)與槽機(jī)制,QT界面開發(fā)-圖像繪制,QT網(wǎng)絡(luò),QT數(shù)據(jù)庫編程,QT項(xiàng)目實(shí)戰(zhàn),QT嵌入式開發(fā),Quick模塊等等)↓↓↓↓↓↓見下面↓↓文章底部點(diǎn)擊莬費(fèi)領(lǐng)取↓↓?

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:Qt界面設(shè)置無邊框之后如何實(shí)現(xiàn)縮放界面-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://aaarwkj.com/article22/ccghjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、面包屑導(dǎo)航軟件開發(fā)、域名注冊(cè)、網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
国产原创av超爽剧情系列| 精品福利视频蜜臀91| 免费高清av中文字幕| 久草福利在线观看免费| 日本在线一区二区视频麻豆| 国产一区黄片视频在线观看| 韩国av毛片在线播放| 99精品久久久中文字幕日本| 91老熟女露脸大合集| 欧美一区日韩二区在线| 在线亚洲av不卡一区二区三区| 野花日本免费高清完整| 丰满人妻一区二区三区色| 欧美αv一区二区三区| 亚洲精品一区二区激情| 成人一区二区三区乱码| 花花草草寻亲记在哪里免费看| 日日摸夜夜添添出白浆| 国产精品一区二区久久蜜桃麻豆| 人妻有码一区二区三区| 日韩在线不卡视频一区| 精品少妇人妻久久av免费| 超薄丝袜美腿一二三区在线播放| 久久亚洲春色中文字幕| 成人免费在线视频不卡| 国产三级三级三级av精品| 日本av二区三区在线| 亚洲熟妇av乱码在线观看| 精品国产一区二区三区精品日韩| 亚洲最新一区二区在线观看| 国产精品国产三级国产专播| 国产精品国产三级国av麻豆| 熟女一区二区中文字幕| 大陆av剧情网站在线观看| 少妇被啪出水在线视频| av全欧国男人在线天堂| 日韩av不卡免费播放| 国产日韩熟女中文字幕| 亚洲一区二区色黄大片| 侵犯人妻中文字幕一区二区| 国产男女免费操作视频|