как установить размер новому окну

Чтобы открывающееся окно могло установить само себе размер - это задача не тривиальная.

Как правило нам надо установить размер больше чем по умолчанию, чтобы показать все элементы на экране.

Как известно в Qt такое возможно через использование setMinimumSize. Это железно всегда сработает.  Вызов adjustSize() явно в коде делать при этом не надо.

Но есть еще и способ сделать то же самое, но через qss стили (setStyleSheet). Можно указать все диалогам минимальную высоту и ширину (min-height и min-width). И это работает ( даже еще в Qt 4 ). И это намного удобнее, так как можно установки в qss создавать глобально для всех виджетов в приложении.

const QString add_QDialog_Styles()
{
    QSize sz = myGui::screen_size();

    int hh = floor( (double) sz.height() / 1.5 );
    int ww = qMin( (double) hh / 1.5 ,  floor( (double) sz.width() /2)  );

    return
            "QDialog{\n"\
            "   padding:" appDef::em1 appDef::ee ";\n"\
            "   min-height: " QString::number(hh) appDef::ee ";\n"\
            "   min-width: " QString::number(ww) appDef::ee ";\n"\
            "}\n"
            ;
}

Ширина и высота экрана в пикселях без проблем доступна через QDesktopWidget. Таким образом у нас в примере окошко диалога по высоте всегда /1.5 и по ширине меньше высоты в 1.5 раза (тип портрет).

фотка 1

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

фотка 2

Примечание: переопределение sizeHint не поможет решить задачу в случае например с QDialog. Он все равно откроется не такой как надо. sizeHint это подсказка.

Но как далее также разрешить пользователю изменение размера окна, а именно его уменьшение.

Ответ как ни странно есть. Сначала в конструкторе окна установать требуемое setMinimumSize(...).

Потом при вызове exec() или show() окна скинуть minimumSize ( setMinimumSize(QSize(0,0)) ), чтобы пользователь смог изменять размер окна по своему усмотрению.

И это сработает!

Сначала пользователь увидит окно требуемого размера (чтобы все максимально удобно отображалось), а потом через справа внизу Grip-ом сможет поиграть размером окна.

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

Очень полезная идея.

Реализовано например в нашей программе БИТ драйвер ККТ.