2017-10-30 15 views
0

QWidgetから継承したTitleBarというクラスがあり、新しいウィジェットを作成してsetparent()を実行しましたが、setparent子ウィジェットを表示しないと、setparent親と、そのいくつかのランダムなplacessでの表示、最大化ビューの場合のみ、それが正しい場所にsetParent()が子ウィジェットを表示していない

TitleBar::TitleBar(QWidget *parent) : QWidget(parent) 
{ 
    m_jobSubmitWidget = csJobSubmitPoolWidget::getSubmitPoolInst(); 
// m_jobSubmitWidget->setParent(QWidget::window()); 
} 

void csTitleBar::BtnClicked() 
{ 
    QPoint pos = m_queueBtn->pos() + m_serverToolBar->pos() + QPoint(-m_jobSubmitWidget->width() + m_queueBtn->width(),62); // these are member variables in TitleBar class 
    // pos shows always same value on moving parent widget 

    if(itemCount > 2){ 
     m_jobSubmitWidget->move(pos); 
     m_jobSubmitWidget->show(); 
     m_jobSubmitWidget->setFocus(); 
    } 

}

答えて

1

を示して、私は本当にあなたがQt documentationで良いの読み取りを取ることを示唆しています。

Q親があるウィジェットは、親の内部に表示されます(QDialogを除く)。ウィジェットに親がない場合、ウィジェットは別のウィンドウとして表示されます。

QWidget::window()の結果へのウィジェットの親子化は、どのウィジェットが返されるかわからないので危険です。子ウィジェットの最終的な場所はわかりません。

また、親を持つウィジェットでshow()に電話する必要はありません。デフォルトでは、可視性は親の可視性に従います。

関連する問題