Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фильтр событий
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
Юрий
Здравствуйте, не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально. Вот небольшой пример, не воплощённый в жизнь:
#include <QtGui>

class MouseFilter : public QObject
{
    public:
        MouseFilter(QObject *pobj = 0) : QObject(pobj){}
    protected:
         bool eventFilter(QObject *pobj, QEvent *pe)
        {
         if(pe->type() == QEvent::Resize){
             QResizeEvent *sizeEvent = static_cast<QResizeEvent*> (pe);
            // что дальше???
                return true;
            }else
            return false;
        }
};

class ResizeObserver : public QLabel{
    public:
        ResizeObserver(QWidget *pwgt = 0) : QLabel (pwgt)
        {
         setAlignment(Qt::AlignCenter);
        }

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    ResizeObserver wgt;
    QWidget chwgt(&wgt);
    chwgt.resize(200,200);
    chwgt.move(30,25);
    chwgt.installEventFilter(new MouseFilter(&chwgt));
    chwgt.setStyleSheet(QString::fromUtf8("background-color: rgb(250, 251, 251);\n"));
    wgt.setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 255);\n"));
    wgt.resize(250,250);
    
    wgt.show();
    return app.exec();
}
Steklova Olga
Цитата(Гость_Юрий_* @ 1.3.2012, 16:46) *
не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально
Скажите конкретнее, что вам нужно.
Юрий
Цитата(Steklova Olga @ 2.3.2012, 14:00) *
Цитата(Гость_Юрий_* @ 1.3.2012, 16:46) *
не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально
Скажите конкретнее, что вам нужно.

На простом примере: В главном окне - виджет потомок (ну... QScrollArea например). Растягиваю главное окно, соответственно меняется его размер. Так вот, как динамически изменить размер виджета потомка?(при помощи возникающего события передать ему меняющийся размер родителя). Вариант с использованием QGridLayout получается единственный?
ViGOur
Цитата(Гость_Юрий_* @ 2.3.2012, 16:10) *
Вариант с использованием QGridLayout получается единственный?
Ну почему же, есть и QHBoxLayout, QVBoxLayout, QFormLayout, QGridLayout, и QStackedLayout.
Вот только мне пока не понятно, зачем тебе использовать события, если есть Классы компоновки?

Если просто, ради изучения фильтра событий разве что! :)

Как вариант, тебе нужно переопределить твой класс QWidget и в нём уже реализовать eventFilter, хотя по моему лучше переопределить виртуальную функцию QWidget::resizeEvent
После чего получаешь в QResizeEvent, получаешь QResizeEvent::size и назначаешь его всем свои дочерним элементам пропрционально их размеру.



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.