crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Использование собственных виджетов., Сам по себе ништяк, с предком - глюк.
Гость_Psi_*
сообщение 27.10.2008, 1:03
Сообщение #1





Гости








    


Подскажите, что может быть не так.
Самописный виджет - наследник QWidget, замечательно отображается, когда у него нет предков и он не находится в layout'e.

А вот когда вставляю его в другой QWidget - размеры становятся 16 на 16 пикселей или даже меньше.
Как заставить виджет подбирать себе правильный размер? Чтобы он весь в него влезал и масштабировался при изменении размеров родительского виджета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.10.2008, 1:11
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ты должен реализовать функцию sizeHint(), которая будет возвращать размер-подсказку для компоновщиков (QLayout), они у этой функции запрашивают, каких размеров желает быть виджет.

пример, несколько кривоват. Метка с фоновым рисунком:
Исходник
#ifndef YLABEL_H
#define YLABEL_H

#include <QLabel>

// ----------------------------------------------------------------------

class YLabel : public QLabel
{
protected:
    QSize size;// Будет хранитьразмер виджета
    
public:
    YLabel( QWidget * parent = 0, Qt::WindowFlags f = 0 );
    YLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
    
    void setBackground(QPixmap pix);
    
    virtual QSize sizeHint() const;
};

#endif // END OF YLABEL_H



#include "YLabel.h"
// ----------------------------------------------------------------------


YLabel::YLabel( QWidget * parent, Qt::WindowFlags f): QLabel(parent, f)
{
    // Установим политику размеров в виксированую, нужно для Layout'ов
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}

YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : QLabel(text, parent, f)
{
    // Установим политику размеров в виксированую, нужно для Layout'ов
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
}

// Установка фона
void YLabel::setBackground(QPixmap pix)
{
  QPalette pal;
  
    pal.setBrush(backgroundRole(),QBrush(pix) );//Qt::blue
    setPalette(pal);
    size=pix.size();
    resize(size);
    setAlignment(Qt::AlignCenter);
    //setSizePolicy(QSizePolicy::Fixed);
    
    setAutoFillBackground(true);
}
/**/
// Рекомендация размера, для Layout'ов
QSize YLabel::sizeHint() const
{
    return size;
}
В этом примере размер виджета фиксирован, ради фонового рисунка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
u235
  опции профиля:
сообщение 20.10.2009, 21:56
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 6.9.2008
Пользователь №: 284

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне еще пришлось setMinimumSize() вызывать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.3.2025, 7:21