Qt如何通過(guò)pos()獲取坐標(biāo)信息
背景:這是一個(gè)QWidget窗體,里面是各種布局的組合,一層套一層。
我希望得到綠色部分的坐標(biāo)信息(x,y)
QPoint get_pos(QWidget* w, QWidget* parent) { if ((QWidget*)w->parent() == parent) { return w->pos(); } else { QPoint pos(w->pos()); pos += get_pos((QWidget*)w->parent(), parent); return pos; } }
假設(shè)
綠色窗體為w
最外面的窗體為m
get_pos(w,m);
附:在實(shí)現(xiàn)一個(gè)可以自由拖動(dòng)位置的widget時(shí)
void ShadowWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton && !mouse_press) { mouse_press = true; } //窗口移動(dòng)距離 orig_point = event->globalPos(); orig_pos = pos() ; } void ShadowWidget::mouseReleaseEvent(QMouseEvent *) { if (mouse_press) { mouse_press = false; } } void ShadowWidget::mouseMoveEvent(QMouseEvent *event) { //移動(dòng)窗口 if (mouse_press) { QPoint move_point = event->globalPos(); move(move_point - orig_point + orig_pos ); /*move是相對(duì)于桌面系統(tǒng)來(lái)移動(dòng)widget,所以是相對(duì)于移動(dòng)前 widget在桌面系統(tǒng)的位置上來(lái)進(jìn)行的, 所以要加上orig_pos*/ } }
在坐標(biāo)位置變換時(shí)注意下不同坐標(biāo)系的坐標(biāo)軸原點(diǎn)差異,就能靈活應(yīng)對(duì)了。
總結(jié)
到此這篇關(guān)于Qt如何通過(guò)pos()獲取坐標(biāo)信息的文章就介紹到這了,更多相關(guān)Qt pos()獲取坐標(biāo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中復(fù)制構(gòu)造函數(shù)和重載賦值操作符總結(jié)
這篇文章主要介紹了C++中復(fù)制構(gòu)造函數(shù)和重載賦值操作符總結(jié),本文對(duì)復(fù)制構(gòu)造函數(shù)和重載賦值操作符的定義、調(diào)用時(shí)機(jī)、實(shí)現(xiàn)要點(diǎn)、細(xì)節(jié)等做了總結(jié),需要的朋友可以參考下2014-10-10C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易通訊錄
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07全局靜態(tài)存儲(chǔ)區(qū)、堆區(qū)和棧區(qū)深入剖析
在C++中,內(nèi)存可分為系統(tǒng)數(shù)據(jù)區(qū),自由存儲(chǔ)區(qū),文本區(qū),const數(shù)據(jù)區(qū),全局靜態(tài)區(qū),堆區(qū)和棧區(qū)2012-11-11C語(yǔ)言重難點(diǎn)之內(nèi)存對(duì)齊和位段
這篇文章主要介紹了C語(yǔ)言重難點(diǎn)之內(nèi)存對(duì)齊和位段,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05