Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Tmin10 от Сентябрь 01, 2012, 16:18



Название: Неизменяемые границы окна
Отправлено: Tmin10 от Сентябрь 01, 2012, 16:18
Захотелось мне сделать неизменяемые границы окна, которые подстраиватся автоматичеки, для этого написал код:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->mygroupBox->hide();
    layout()->setSizeConstraint(QLayout::SetFixedSize);
}
Но к сожалению, при запуске приложения не видно ни его окна, ни значка приложения. Если константы размера поставить другие окно будет, оно будет таким же, как и без этой строчки. Что можно сделать, чтобы исправить это?


Название: Re: Неизменяемые границы окна
Отправлено: maint от Сентябрь 01, 2012, 16:43
вообще не понятно чего хочется. Но попробую догадаться. Есть функции     setMinimumSize и setMaximumSize. С их помощью можно задать неизменяемый размер. А фактический размер экрана, от которого нужно плясать можно вычислить
Код:
    QDesktopWidget *d = QApplication::desktop();
    w = d->width();     // returns desktop width
    h = d->height();     // returns desktop height
вообще формулируцте вопрос чнтко. Может пока формулируете и ответ сам придет ;)


Название: Re: Неизменяемые границы окна
Отправлено: Tmin10 от Сентябрь 01, 2012, 16:56
Что я хотел сделать:
Есть окно, нижнюю часть (mygroupBox) я скрываю в конструкторе и дальше я хочу, чтобы оставшееся окно нельзя было развернуть на весь экран, а размер окна подгонялся под текущие видимые виджеты автоматически. Делал по книжке Бланшет, Саммерфилд - QT4 Программирование GUI на С++.2ed, там в примере было показано как так сделать, для этого использовалось layout()->setSizeConstraint(QLayout::SetFixedSize);, что в моём случае приводит лишь к тому, что при запуске окна приложения вообще не видно.


Название: Re: Неизменяемые границы окна
Отправлено: Bepec от Сентябрь 01, 2012, 17:08
Если вы написали это в конструкторе, то у поля будут значения 0,0. Точечка :)

Соответственно это надо применять уже после конструктора )


Название: Re: Неизменяемые границы окна
Отправлено: Tmin10 от Сентябрь 01, 2012, 17:36
Меня смущает, что точно такой же код в примере из книги даёт нужный результат, а у меня нет...
А почему получается 0х0, если у меня остаются видимы 2 виджета?


Название: Re: Неизменяемые границы окна
Отправлено: Bepec от Сентябрь 01, 2012, 17:52
Они у тебя видимыми становятся после того как отработает конструктор, ннэ?


Название: Re: Неизменяемые границы окна
Отправлено: Tmin10 от Сентябрь 01, 2012, 18:09
Вот пример из книги по которому я делаю, там же изменение размера тоже выполняется в конструкторе, однако прога работает корректно. (Бинарник собран под убунтой)


Название: Re: Неизменяемые границы окна
Отправлено: kambala от Сентябрь 01, 2012, 18:34
думаю весь секрет в vertical spacer'е (см. файл sortdialog.ui)


Название: Re: Неизменяемые границы окна
Отправлено: Примерный ученик от Сентябрь 07, 2012, 11:03
Надо сделать минимальное и максимальное значение по одному из измерений отличными на 1 пиксел.
Тогда все работает. Почему то, если минимальные и максимальные размеры окна совпадают, окно становится недоступным и ни на какие сигналы не реагирует. ???


Название: Re: Неизменяемые границы окна
Отправлено: navrocky от Сентябрь 07, 2012, 12:41
Захотелось мне сделать неизменяемые границы окна, которые подстраиватся автоматичеки, для этого написал код:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    layout()->setSizeConstraint(QLayout::SetFixedSize);
}
Но к сожалению, при запуске приложения не видно ни его окна, ни значка приложения. Если константы размера поставить другие окно будет, оно будет таким же, как и без этой строчки. Что можно сделать, чтобы исправить это?

Для QMainWindow такое не прокатывает. Используй QWidget.