l
logsinМамыр 12, 2017, 3:47 Т.Қ.

Изменение размера окна

Как осуществить пропорциональное изменение окна? т.е чтобы, например, при смене размера, оно оставалось квадратным.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

3
Evgenii Legotckoi
  • Мамыр 13, 2017, 2:05 Т.Ж.

Можно переопределить метод resizeEvent , может выглядеть примерно так:

В заголовочном файле объявляем переопределение
virtual void resizeEvent(QResizeEvent *event) override;
Реализация
void Widget::resizeEvent(QResizeEvent *event)
{
    int width = event->size().width();
    int height = event->size().height();
    int oldWidth = event->oldSize().width();
    int oldHeight = event->oldSize().height();

    if (width < oldWidth || height < oldHeight)
    {
        if (width > height)
        {
            resize(height, height);
        }
        else
        {
            resize(width, width);
        }
    }
    else
    {
        if (width > height)
        {
            resize(width, width);
        }
        else
        {
            resize(height, height);
        }
    }
}

Суть в том, что при изменении размеров генерируется событие QResizeEvent, которое несёт новый размер и старый размер. Поэтому можно поиграться со значениями высоты и ширины окна.

    l
    • Мамыр 13, 2017, 3:41 Т.Ж.

    я пытался сначала решить проблему данным способом, но у нее есть свои изъяны и должен быть другой способ. так как при такой реализации - окно дёргается при смене размера, обратно уменьшить его нельзя(если не потянуть за угол окна) и еще когда мы в событии смены размера окна, вызываем событие смены размера окна, то можем словить неприятную рекурсию, что закончится очень плачевно.

      Evgenii Legotckoi
      • Мамыр 13, 2017, 8:11 Т.Ж.

      Отследить изменение размеров окна можно только через метод resizeEvent или proccessEvent , что эквивалентно resizeEvent , только туда сыпятся абсолютно все события. Сигналов об изменении размеров виджет Вам кидать не будет, только если не переопределите метод resizeEvent и сами не начнёте испускать эти сигналы, только зачем?

      Что касается вашего утверждения

      должен быть другой способ

      С чего вы вообще взяли, что должен быть другой способ? За 15 лет пользования ПК я не видел ни одной программы, которая бы реализовывала тот User Case, который вы пытаетесь реализовать. Думаю, что в Qt Company не стали бы заморачиваться с настолько нетипичным примером использования фреймворка.

      Единственное, что могу посоветовать, это покопаться в API целевой операционной системы и покрутить QAbstractNativeEventFilter . Но результат в данном случае не гарантирован.

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз
        Г

        C++ - Тест 001. Первая программа и типы данных

        • Нәтиже:66ұпай,
        • Бағалау ұпайлары-1
        t

        C++ - Тест 001. Первая программа и типы данных

        • Нәтиже:33ұпай,
        • Бағалау ұпайлары-10
        t

        Qt - Тест 001. Сигналы и слоты

        • Нәтиже:52ұпай,
        • Бағалау ұпайлары-4
        Соңғы пікірлер
        G
        GoattRockҚыр. 3, 2024, 8:50 Т.Қ.
        Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
        d
        dblas5Шілде 5, 2024, 6:02 Т.Қ.
        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        k
        kmssrАқп. 9, 2024, 2:43 Т.Ж.
        Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
        АК
        Анатолий КононенкоАқп. 5, 2024, 9:50 Т.Ж.
        Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
        Енді форумда талқылаңыз
        Evgenii Legotckoi
        Evgenii LegotckoiМаусым 24, 2024, 10:11 Т.Қ.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        F
        FynjyШілде 22, 2024, 11:15 Т.Ж.
        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
        BlinCT
        BlinCTМаусым 25, 2024, 8 Т.Ж.
        Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
        BlinCT
        BlinCTМамыр 5, 2024, 12:46 Т.Қ.
        Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
        Evgenii Legotckoi
        Evgenii LegotckoiМамыр 2, 2024, 9:07 Т.Қ.
        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

        Бізді әлеуметтік желілерде бақылаңыз