qt MinimumSize() возвращает 0, но в дизайнере qt для него установлено ненулевое значение

Существует пользовательский виджет, унаследованный от QLabel, который продвигается за счет расширенных функций. Его минимальный размер (для ширины и высоты) установлен на 150 в дизайнере qt.

Но вызовы minimumSize.width(), minimumSize().height() в конструкторе пользовательского виджета почему-то возвращают 0

InventoryItem::InventoryItem(QWidget* parent): QLabel(parent)
{
    qDebug() << minimumSize().width(); // 0 ???
    qDebug() << minimumSize().height(); // 0 ???
}

Однако из конструктора главного окна он возвращает правильные значения (150, 150), вызывая ui->thatWidget->minimumSize().width(); // 150,... и то же самое для высоты

Также есть вертикальное и горизонтальное расположение виджетов в главном окне.

Я просто не знаком с программированием графического интерфейса в QT.

Что там происходит??

Как получить правильные значения из пользовательского виджета??


person ampawd    schedule 04.11.2017    source источник


Ответы (1)


Конструктор главного окна начинается со следующей строки: ui->setup(this);. Это вызов функции setup() файла moc, автоматически сгенерированного для главного окна. Эта функция создает InventoryItem и ЗАТЕМ устанавливает его минимальный размер. Видеть — значит верить, поэтому взгляните на файл moc в папке, в которой собран проект. Таким образом, вызывая ui->thatWidget->minimumSize().width(); позже в конструкторе главного окна, сообщается ожидаемая минимальная ширина 150. Однако во время создания InventoryItem минимальный размер еще не установлен, поэтому вызов qDebug() << minimumSize().width(); в его конструкторе возвращает значение по умолчанию для минимальной ширины. В документации для QWidget указано для минимального размера:

По умолчанию это свойство содержит размер с нулевой шириной и высотой.

Короче говоря, мир по-прежнему функционирует, т. е. поведение, которое вы наблюдаете, является ожидаемым.

person scopchanov    schedule 04.11.2017