Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Ноябрь 09, 2013, 15:01



Название: QDialog + sizeHint = проблема
Отправлено: once_again_abc от Ноябрь 09, 2013, 15:01
Код:
LoadDialog::LoadDialog( const QString title, QWidget* pParent )
            : QDialog( pParent, Qt::Dialog | Qt::Desktop )
{
    Q_ASSERT( pParent != 0 );

    setWindowTitle( title );

    m_pProgressMessage = new QLabel( this );
    m_pProgressMessage->setText( tr("Loaded 9999999999999 items") );
    m_pAbortButton = new QPushButton( tr("Abort"), this );
    m_pAbortButton->setFixedSize( m_pAbortButton->sizeHint() );
    m_pAbortButton->setDisabled( true );
    m_pAbortButton->setVisible( false );

    QVBoxLayout* pVLayout = new QVBoxLayout();
    pVLayout->addWidget( m_pProgressMessage, 0, Qt::AlignCenter );
    pVLayout->addWidget( m_pAbortButton, 0, Qt::AlignCenter );

    setLayout( pVLayout );

    QSize s1 = sizeHint();
    QSize s2 = fontMetrics().size( Qt::TextSingleLine, windowTitle() );

    setMinimumSize( s1 + s2 );
    setFixedSize( s1 + s2 );

    connect( m_pAbortButton, SIGNAL(clicked()), this, SLOT(close()), Qt::DirectConnection );
}

объясните мне пожалуйста, почему первый раз показывается диалог с пустым виджетом (диалог состоит только из заголовока окна и рамки), а все последующие разы - нормальный размер и при этом s1 и s2 правильные (осмысленные)?!


Название: Re: QDialog + sizeHint = проблема
Отправлено: once_again_abc от Ноябрь 11, 2013, 00:05
полечилось добавлением

Код:
pVLayout->setSizeConstraint( QLayout::SetMinimumSize );

перед вызовом

Код:
setLayout( pVLayout );

в конструкторе.

Но для меня так и остается загадкой, почему первый раз виджет не отображался нормально.