Qt如何通過pos()獲取坐標(biāo)信息
背景:這是一個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)一個可以自由拖動位置的widget時(shí)
void ShadowWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton && !mouse_press) { mouse_press = true; } //窗口移動距離 orig_point = event->globalPos(); orig_pos = pos() ; } void ShadowWidget::mouseReleaseEvent(QMouseEvent *) { if (mouse_press) { mouse_press = false; } } void ShadowWidget::mouseMoveEvent(QMouseEvent *event) { //移動窗口 if (mouse_press) { QPoint move_point = event->globalPos(); move(move_point - orig_point + orig_pos ); /*move是相對于桌面系統(tǒng)來移動widget,所以是相對于移動前 widget在桌面系統(tǒng)的位置上來進(jìn)行的, 所以要加上orig_pos*/ } }
在坐標(biāo)位置變換時(shí)注意下不同坐標(biāo)系的坐標(biāo)軸原點(diǎn)差異,就能靈活應(yīng)對了。
總結(jié)
到此這篇關(guān)于Qt如何通過pos()獲取坐標(biāo)信息的文章就介紹到這了,更多相關(guān)Qt pos()獲取坐標(biāo)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中復(fù)制構(gòu)造函數(shù)和重載賦值操作符總結(jié)
這篇文章主要介紹了C++中復(fù)制構(gòu)造函數(shù)和重載賦值操作符總結(jié),本文對復(fù)制構(gòu)造函數(shù)和重載賦值操作符的定義、調(diào)用時(shí)機(jī)、實(shí)現(xiàn)要點(diǎn)、細(xì)節(jié)等做了總結(jié),需要的朋友可以參考下2014-10-10全局靜態(tài)存儲區(qū)、堆區(qū)和棧區(qū)深入剖析
在C++中,內(nèi)存可分為系統(tǒng)數(shù)據(jù)區(qū),自由存儲區(qū),文本區(qū),const數(shù)據(jù)區(qū),全局靜態(tài)區(qū),堆區(qū)和棧區(qū)2012-11-11