2017-10-30 22 views
0

QWidgetから継承したTitlebarというクラスがあります。次のコードは、タイトルバークラスのコンストラクタ内部に入る:m_queueBtn->pos()を印刷している間親ウィジェットのサイズ変更または移動時にQToolButtonの位置が変更されない

m_queueBtn = new QToolButton; 
m_serverToolBar = new QToolBar; 
m_serverToolBar->addWidget(m_queueBtn); 

QPoint pos = m_queueBtn->pos(); 

、それは常に代わりにサイズ変更や移動の同じ値を示しています。

+0

一度親または単にコンストラクタでサイズを変更するとき、あなたが実際にポジションを印刷しますか? – xander

答えて

1

QToolButtonsize-policyは、デフォルトでFixed/Fixedであるため、親のサイズ変更は効果がありません。また、pos()は親ウィジェットとの相対座標を返します。つまり、親を動かすことは何の効果もありません。

あなたが(デスクトップからの相対すなわち)子ウィジェットのグローバル位置を取得したい場合は、あなたがmapToGlobalを使用することができます。

QPoint pos = m_queueBtn->mapToGlobal(m_queueBtn->pos()); 

または子のいずれかに対して所定の位置に座標変換しますその祖先ウィジェット、あなたはmapToを使用することができます。

QPoint pos = m_queueBtn->mapTo(ancestor, QPoint(0, 0)); 
関連する問題