Russian Qt Forum
Сентябрь 30, 2024, 12:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: sizeHint  (Прочитано 9805 раз)
pakulo
Гость
« : Июнь 28, 2007, 08:45 »

Этот параметр означает рекомендованный размер виджета...
Т.е. если я переопределяют его создавая свой виджет и устанавливаю там return QSize(20, 20); Это не означает что мой виджет будет иметь такой максимальный размер?
Записан
Steven_Orko
Гость
« Ответ #1 : Июнь 28, 2007, 09:06 »

Не значит. Посмотри заодно значение политик QSizePolicy. Там при одних значениях  sizeHint() используется, при других игнорируется.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Июнь 28, 2007, 09:21 »

А никто не пробовал делать sizeHint() динамическим? Т.е. чтобы размер виджета менялся при изменениях его контента. У меня такое чувство, что этот хинт корректно применяется только при конструировании виджета, т.к. если я пытаюсь менять его по ходу работы приложения - то размеры виджета остаются прежними...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
goer
Гость
« Ответ #3 : Июнь 28, 2007, 09:34 »

Может быть.. особенно есл учесть что есть только функция чтения свойства(нет же setSizeHint), то можно интуитивно предположить что функция должна возвращать константу.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Июнь 28, 2007, 10:27 »

похоже, только setFixedSize() спасет отца русской демократии...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
goer
Гость
« Ответ #5 : Июнь 28, 2007, 10:37 »

Меня еще другое убивает: устанавливаю геометрию для захайденого виджета. Потом показываю его: ширина устанавливается нормально, высота остается неизменной. Хайдю. Показываю снова. Со второго показа наконецто получаю геометрию которую установил.

При этом для тех виджетов что отображаются, установка геометрии работает, НО тостеры ругаются(да я и сам вижу) - уж очень медлено окошко меняет свою геометрию, что приводит к неприятному визуальному восприятию.

Так что в каком то смысле при определенных условиях установку геометрии тоже можносчитать одноразовой функцией Улыбающийся))
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Июнь 28, 2007, 11:17 »

Ну это уже баг в Qt. надо репортить.
А вообще, с этими политиками размеров они перемудрили. Хватило бы политик fixed, stretched, max, min, ignored.
(stretched - это допустим если тебе надо виджеты пропорционально растягивать). И еще, minimum и maximum я бы таки местами поменял - по логике, minimum должен занимать минимум места, а не наоборот.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
CroCIV
Гость
« Ответ #7 : Июль 03, 2009, 15:05 »

А никто не пробовал делать sizeHint() динамическим? Т.е. чтобы размер виджета менялся при изменениях его контента. У меня такое чувство, что этот хинт корректно применяется только при конструировании виджета, т.к. если я пытаюсь менять его по ходу работы приложения - то размеры виджета остаются прежними...

Делаем раз:
преобразуем нужный виджет на нашей форме в Qt Designerе в собственный класс, порожденный от базового класса щелкнув по нему правой кнопкой миши и выбрав пункт Promote to и задаем ему <имя>

делаем два: включаем (создаем) в проект <имя>.h и <имя>.cpp файлы
и описываем их по примеру (если у кого-то с этим проблемы):

Код:
#ifndef QTABLEVIEWVARSIZEHINT_H
#define QTABLEVIEWVARSIZEHINT_H

#include <QTableView>

class QTableViewVarSizeHint : public QTableView
{
Q_OBJECT

public:
QTableViewVarSizeHint(QWidget *parent = 0);
~QTableViewVarSizeHint();
QSize sizeHint() const;
void setSizeHint(QSize newSizeHint);

private:
QSize mySizeHint;
};

#endif // QTABLEVIEWVARSIZEHINT_H


#include <QtGui>
#include "qtableviewvarsizehint.h"

QTableViewVarSizeHint::QTableViewVarSizeHint(QWidget *parent)
: QTableView(parent)
{

}

QTableViewVarSizeHint::~QTableViewVarSizeHint()
{

}
void QTableViewVarSizeHint::setSizeHint(QSize newSizeHint)
{
mySizeHint = newSizeHint;
}

QSize QTableViewVarSizeHint::sizeHint() const
{
return mySizeHint;
}

готово, наслаждаемся виджетом, с манипулируемой функцией sizeHint(). теперь устанавливая переменнею mySizeHint и вызывая функцию adjustSize() у формы владельца виджета с умилением наблюдаем желаемое, т.к. adjustSize() родителя для расположения на своей форме всех дочерних виджетов вызывает у них sizeHint().

Как вариант можно не вводить функцию setSizeHint(QSize newSizeHint) и переменную mySizeHint, а сразу вычислять и выдавать необходимый размер, но такой код мне показался гибче, хоть и вызовов больше.

З.Ы.: ура теперь я тоже пишу на Qt, наконец-то!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 23.