SUAI-TaskPlanner-Contest / TaskPlanner

Client application for working with todos and syncing with CalDAV servers
MIT License
3 stars 2 forks source link

Разработка интерфейса с двумя всплывающими окнами #44

Closed slavakyrlan closed 1 year ago

slavakyrlan commented 1 year ago

Требования: программист

Краткое описание

Добавление в программу 2 всплывающих окна (предупреждение, редактирование окна), которые будут открываться поверх окна и оставаться активными, пока пользователь не закроет их вручную. При этом неактивное окно должно оставаться под активным и заблокированным.

Функциональные требования или документация

Диаграмма переходов

Результаты

Код .py Файл .md с описанием

Срок выполнения

2 недели(4 мая)

slavakyrlan commented 1 year ago

@SUAI-TaskPlanner-Contest/project_template

slavakyrlan commented 1 year ago

Чтобы заблокировать окно приложения QML, когда открыто другое окно, можно воспользоваться свойством enabled элемента Window.

Например, если у вас есть главное окно приложения и окно настроек, то можно создать свойство settingsOpen в главном окне и установить его в true, когда окно настроек открыто.

Затем, в элементе Window главного окна установить enabled: !settingsOpen, чтобы блокировать главное окно, когда окно настроек открыто:

Window {
    id: mainWindow
    // ...
    enabled: !settingsOpen
    // ...
}

Window {
    id: settingsWindow
    // ...
    Component.onCompleted: {
        // set the settingsOpen property to true when this window is opened
        mainWindow.settingsOpen = true;
    }
    onClosed: {
        // set the settingsOpen property to false when this window is closed
        mainWindow.settingsOpen = false;
    }
}

Таким образом, при открытии окна настроек свойство settingsOpen устанавливается в true и главное окно блокируется. Когда окно настроек закрывается, свойство settingsOpen устанавливается в false, и главное окно снова разблокируется.

astronik00 commented 1 year ago

Чтобы заблокировать окно приложения QML, когда открыто другое окно, можно воспользоваться свойством enabled элемента Window.

Например, если у вас есть главное окно приложения и окно настроек, то можно создать свойство settingsOpen в главном окне и установить его в true, когда окно настроек открыто.

Затем, в элементе Window главного окна установить enabled: !settingsOpen, чтобы блокировать главное окно, когда окно настроек открыто:

Window {
    id: mainWindow
    // ...
    enabled: !settingsOpen
    // ...
}

Window {
    id: settingsWindow
    // ...
    Component.onCompleted: {
        // set the settingsOpen property to true when this window is opened
        mainWindow.settingsOpen = true;
    }
    onClosed: {
        // set the settingsOpen property to false when this window is closed
        mainWindow.settingsOpen = false;
    }
}

Таким образом, при открытии окна настроек свойство settingsOpen устанавливается в true и главное окно блокируется. Когда окно настроек закрывается, свойство settingsOpen устанавливается в false, и главное окно снова разблокируется.

👍

slavakyrlan commented 1 year ago

Чтобы создать выпадающий список с кнопками редактирования в QML, можно использовать компонент ComboBox и настроить его элементы.

Вот пример кода, который создает ComboBox и заполняет его элементы. Также добавляются кнопки редактирования:

import QtQuick.Controls 2.15

ComboBox {
    id: myComboBox
    width: 150
    model: [ "Option 1", "Option 2", "Option 3", "Option 4" ]

    // Создаем кнопку "Добавить"
    Button {
        text: "Add"
        onClicked: {
            myComboBox.model.append("New Option")
        }
    }

    // Создаем кнопку "Удалить"
    Button {
        text: "Remove"
        onClicked: {
            myComboBox.model.remove(myComboBox.currentIndex)
        }
    }

    // Создаем кнопку "Изменить"
    Button {
        text: "Edit"
        onClicked: {
            myComboBox.model.set(myComboBox.currentIndex, "Edited Option")
        }
    }
}

В этом примере создается ComboBox с четырьмя опциями. Также добавляются кнопки "Добавить", "Удалить" и "Изменить" для управления элементами ComboBox.

Кнопка "Добавить" добавляет новый элемент в конец списка. Кнопка "Удалить" удаляет выбранный элемент из списка. Кнопка "Изменить" заменяет выбранный элемент на "Измененный вариант".

astronik00 commented 1 year ago

@slavakyrlan Чем обусловлен срок выполнения 2 недели на задачу, которая делается за несколько вечеров? Вам же нужно просто вызвать окна, а не наполнить их пока что

slavakyrlan commented 1 year ago

@astronik00 Это был указан максимальный срок, те методы, что я указал выше не работают, пока разбираемся каким способом можно заблокировать окно.

slavakyrlan commented 1 year ago

Окно с предупреждением, документация: MessageDialog

astronik00 commented 1 year ago

@slavakyrlan

Если не будет получаться - просите помощь или ищите альтернативы, как можно обойтись без этого. До 4 мая рассчитывать не стоит на эту задачу, иначе мы не успеем. Максимум - 28 апреля. Приоритетнее является задача по верстке главного окна.

Lailes commented 1 year ago

@slavakyrlan

Попробуйте использовать код из этого решения

А так же вероятно на этом допотопном сайте есть рабочий вариант

slavakyrlan commented 1 year ago

@astronik00

Image

Примерно такое окно с предупреждением?

astronik00 commented 1 year ago

@astronik00

Image

Примерно такое окно с предупреждением?

То, что нужно

ISAchainSAW commented 1 year ago

@astronik00 Добавил блокировку окна, если все так, отпиши в тг/вк, т.к. работаю, сюда захожу поздно @slavakyrlan Заходишь в Qt Creator, жмешь Справка, затем в самом низу ищешь Qt Quick, и там надо ковыряться image Это табличка про модальность/блокировку

astronik00 commented 1 year ago

@ISAchainSAW ты мне пример не кинул, но по описанию вроде именно то

ISAchainSAW commented 1 year ago

@astronik00 В смысле пример не кинул? Склонируй ветку и посмотри, или мне надо видео записывать?

Lailes commented 1 year ago

@astronik00 В смысле пример не кинул? Склонируй ветку и посмотри, или мне надо видео записывать?

Предоставить результат своей работы, это обязанность того, кто эту работу делает. Если человеку, для того, чтобы посмотреть что ты сделал, нужно самому открывать ветку и что-то запускать, то это ты плохо предоставил результат работы. Плохо предоставленный результат, это немногим лучше его отсутствия. Иными словами: да, ты должен был записать видео как это работает. Включить OBS дело 10 секунд. И нужно обойтись без таких грубых и резких ответов. Такое недопустимо. Комментарий справедливый

ISAchainSAW commented 1 year ago

@Lailes @astronik00
Очень интересно получается, что обращаюсь я к одному человеку, а отвечает мне другой с предъявой, что он обиделся. Обида это вещь субъективная. Если кто-то из вас увидел в моем сообщении что-то неприемлемое, то это проблема исключительно этого человека, но никак не моя. Такой подход общения говорит о многом, не говоря уже о выделении конкретных слов. Если вы не способны на банальную вежливость типа "Да, запиши видео", а в итоге вы высираете такое, то увы у вас большие проблемы. Если есть какие-то проблемы, то имейте духу подойти и сказать об этом в лицо, а не в онлайне, где все горазды. P.S. Склонировать ветку и запустить проект, тоже, к слову,10 секунд.

Lailes commented 1 year ago

@Lailes @astronik00
Очень интересно получается, что обращаюсь я к одному человеку, а отвечает мне другой с предъявой, что он обиделся. Обида это вещь субъективная. Если кто-то из вас увидел в моем сообщении что-то неприемлемое, то это проблема исключительно этого человека, но никак не моя. Такой подход общения говорит о многом, не говоря уже о выделении конкретных слов. Если вы не способны на банальную вежливость типа "Да, запиши видео", а в итоге вы высираете такое, то увы у вас большие проблемы. Если есть какие-то проблемы, то имейте духу подойти и сказать об этом в лицо, а не в онлайне, где все горазды. P.S. Склонировать ветку и запустить проект, тоже, к слову,10 секунд.

Никто не писал тебе с предьявой что кто-то обиделся, не надо видеть того, чего нет. Я лично посчитал тон твоего сообщения неприемлемым. И не удивляйся, что на твое сообщение ответили в такой же резкой манере. Интересно получается, что неприемлимое "высираешь" ты, а виноват читающий. Да и оказывается, что грубить можно тебе по отношению к другим, а вот вежливо просить должны тебя. Классная логика, ничего не скажешь. Мои выделения слов было к тому, что ты не понял то, что я рассказывал, когда я пояснял принципы командной работы. Если уж для тебя мне понадобилось их повторять третий раз, то не надо предъявлять за курсив. Тут речь идёт не о вежливости, а о профессионализме. Проверяющий вообще не обязан запускать твой код. Его дело посмотреть изменения на странице гитхаба. Ты должен показать как он работает, это касается задач с UI. Копирование ветки и открытие всего что нужно, это отнюдь не 10 секунд и у проверяющего есть свои дела

slavakyrlan commented 1 year ago

https://github.com/SUAI-TaskPlanner-Contest/TaskPlanner/pull/59