setParent()不显示子窗口小部件

时间:2017-10-30 11:27:47

标签: qt qt4 qt-designer

我有一个名为TitleBar的类继承自QWidget并且我创建了一个新的小部件并且做了setparent()但是在做了setparent子窗口小部件没有显示之后,它只在注释setparent但是没有与parent一起显示之后显示,它显示在一些随机播放,在最大化视图上只显示在正确的位置

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 个答案:

答案 0 :(得分:1)

我真的建议您好好阅读Qt documentation

具有父级的QWidgets显示在其父级内(QDialog除外)。如果窗口小部件没有父窗口,它将显示为单独的窗口。

将窗口小部件托管到QWidget::window()的结果有点危险,因为您还不知道将返回哪个窗口小部件,因此您不知道子窗口小部件的最终位置。

此外,您无需在拥有父级的小部件上调用show()。默认情况下,它们的可见性遵循父级可见性。