crossplatform.ru

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

Гость_Юрий_*
сообщение 1.3.2012, 16:46
Сообщение #1





Гости








    


Здравствуйте, не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально. Вот небольшой пример, не воплощённый в жизнь:
#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();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 3)
Steklova Olga
  опции профиля:
сообщение 2.3.2012, 14:00
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата(Гость_Юрий_* @ 1.3.2012, 16:46) *
не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально
Скажите конкретнее, что вам нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Юрий_*
сообщение 2.3.2012, 15:10
Сообщение #3





Гости








    


Цитата(Steklova Olga @ 2.3.2012, 14:00) *
Цитата(Гость_Юрий_* @ 1.3.2012, 16:46) *
не могу никак понять, как применить фильтр событий к изменению размера виджета. Например, при помощи мыши растягиваю главное окно, а его виджет потомок растягивается пропорционально
Скажите конкретнее, что вам нужно.

На простом примере: В главном окне - виджет потомок (ну... QScrollArea например). Растягиваю главное окно, соответственно меняется его размер. Так вот, как динамически изменить размер виджета потомка?(при помощи возникающего события передать ему меняющийся размер родителя). Вариант с использованием QGridLayout получается единственный?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.3.2012, 15:29
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


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

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

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



Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 14:56