А никто не пробовал делать 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, наконец-то!!!