powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt4.2.2 - запретить виджету/окну растягиваться.
7 сообщений из 7, страница 1 из 1
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549212
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос. В справке к Qt-4.2.2 сказано, что виджету можно запретить,
например, менять размер по горизонтали, выставив SizePolicy. Однако на
практике это почему-то "не работает" (либо я чего-то недопонимаю).
Система Slackware 11 Linux/KDE 3.5.4. Вот пример простого тестового кода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>

class TestWidget: public QWidget{
public:
        TestWidget(QWidget *parent =  0 );
};

TestWidget::TestWidget(QWidget *parent)
:QWidget(parent){
        QPushButton *button1 = new QPushButton();
        QPushButton *button2 = new QPushButton();
        button1->setText("button1");
        button2->setText("button2");
        QVBoxLayout *layout = new QVBoxLayout();
        layout->addWidget(button1);
        layout->addWidget(button2);
        setLayout(layout);
        setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
}

int main(int argc, char **argv){
        QApplication app(argc, argv);
        TestWidget widget;
        widget.show();
        return app.exec();
}
Полученное безобразие спокойно растягивается мышой как по вертикали, так и
по горизонтали. Хотя кнопки свой вертикальный размер не меняют. Что я
упустил?

ЗЫ. Как я понимаю, SetGeometry и SetMaximumSize лучше не трогать, так как
Виджет (как я понимаю) перестанет себя адаптировать к изменениям размеров
шрифтов и т.д, а sizeHint (вроде бы) должен определяться Layout'ом
автоматически...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549373
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVТакой вопрос. В справке к Qt-4.2.2 сказано, что виджету можно запретить,
например, менять размер по горизонтали, выставив SizePolicy.Неправильно читаешь. Оно не запрещает менять размер. Оно определяет как виджет будет реагировать на "запрос желаемого размера" полученого от внешнего QLayout. В своем примере, определи SizePolicy не для главного виджета, а для кнопок и сразу увидишь эффект.

ErVКак я понимаю, SetGeometry и SetMaximumSize лучше не трогать, так как
Виджет (как я понимаю) перестанет себя адаптировать к изменениям размеров
шрифтов и т.д, а sizeHint (вроде бы) должен определяться Layout'ом
автоматически...Наоборот. Как раз SetMaximumSize и надо трогать если хочешь ограничить виджет в размерах. Естественно он уже не будет расти выше заданого, даже если ты поставишь внутри гигантский шрифт, но ведь ты сам хочешь ограничить максимальный размер, не так ли?
А SetGeometry всего-лишь изменит местонахождение и размер виджета "здесь и сейчас".
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549375
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manIf there is a QLayout that manages this widget's children, the size policy specified by that layout is used.оно?
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549819
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
В своем примере, определи SizePolicy не для главного виджета, а для кнопок и
сразу увидишь эффект.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TestWidget::TestWidget(QWidget *parent)
:QWidget(parent){
        QPushButton *button1 = new QPushButton();
        QPushButton *button2 = new QPushButton();
        button1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
        button2->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
        button1->setText("button1");
        button2->setText("button2");
        QVBoxLayout *layout = new QVBoxLayout();
        layout->addWidget(button1);
        layout->addWidget(button2);
        setLayout(layout);
        setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
}
Виджет все равно можно растягивать. хотя кнопки свой размер регулируют.
Кстати, в оригинальном примере перепутал параметры (1й и 2й), но все равно
не работает. Мне просто нужно было запретить ресайз по вертикали и
разрешить по горизонтали.

e White Owl
Как раз SetMaximumSize и надо трогать если хочешь ограничить виджет в
размерах.
[/quote]
Я не хочу ограничить его в размерах, но хочу, чтобы он не растягивался по
вертикали (не всегда одно и то же). Т.е. если юзер вдруг поставит 40й
шрифт, желательно, чтобы виджет к этому адаптировался. Хотя можно взять
sizehint и скопировать его в SizeConstraint :-\ - на изменение системных
шрифтов в процессе работы приложение, вроде бы, не может
отреагировать (по крайней мере, у меня реагирует только на изменение шрифта
для заголовка окна, если это не КДЕ-шное приложение)...

[quot maXmo]
оно?

Почти. У QLayout нету sizePolicy, но есть SizeConstraint, который может
запретить ресайзить виджет
Код: plaintext
1.
layout->setSizeConstraint(QLayout::SetFixedSize);
Только в этом случае запрет идет на весь ресайз виджета - и горизонтальный,
и вертикальный.

В принципе, если других вариантов нету (кроме setSizeConstraint и
setMaximumSize), то проблему можно считать решенной..


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549898
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErVМне просто нужно было запретить ресайз по вертикали и разрешить по горизонтали.А ты поставь по горизонтали очень большое число и все. Например 65536 и с точки зрения юзера получится безлимитное по горизонтали, но лимитированое по вертикали окно. Просто и легко :) Ну конечно если юзер сумеет найти ТАКОЙ БОЛЬШОЙ дисплей, то он сумеет найти и ограничение по горизонтали, но я не думаю что это случится очень скоро :)
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549903
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сделать вот так:
Код: plaintext
1.
		setMinimumSize( 200 ,  200 );
		setMaximumSize( 65536 ,  200 );
То получится окно растягивающееся по горизонтали, и фиксированое по вертикали.
...
Рейтинг: 0 / 0
Qt4.2.2 - запретить виджету/окну растягиваться.
    #34549983
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> А ты поставь по горизонтали очень большое число и все. Например 65536 и с
> точки зрения юзера получится безлимитное по горизонтали, но лимитированое
> по вертикали окно. Просто и легко :) Ну конечно если юзер сумеет найти
> ТАКОЙ БОЛЬШОЙ дисплей, то он сумеет найти и ограничение по горизонтали, но
> я не думаю что это случится очень скоро :)
>
В общем, решил я схитрить и сделать немного по-другому:
Код: plaintext
1.
2.
3.
4.
5.
TestWidget::TestWidget(QWidget *parent)
:QWidget(parent){
        ....
        setMaximumHeight(sizeHint().height());
}
Как понимаю, в этом варианте и размер шрифтов будет учитываться (все равно
после запуска программа их изменения игнорирует), и слишком сильно
растягивать окно не получиться. Спасибо за помощь, вопрос закрыт.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt4.2.2 - запретить виджету/окну растягиваться.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]