BlinCT
BlinCT26. April 2016 08:05

Custom QQuickItem — добавляем в QML объект из C++(click на таймере)

qml, c++, timer, custom qquickitem

Всем привет.
Возникла такая проблема, уже несколько дней бьюсь над проблемой, как задать метод для клика по самому объекту timer?
То есть в данном проекте Евгений демонстрирует, как подцепляем на QML слой объекты кнопок и дает им добро на управление таймером, стоп/старт/сброс.
Но вот как дать самому таймеру метод нажатия? То есть нажали один раз на него и если таймер не запущен то он запускается, а при втором нажатии останавливается. Ну и само собою кнопка внешняя на сброс, тут уже из самого примера есть.
Дополнение по теме, если важно: задумка такая, что если на таймере не установлено время, то при запуске он увеличивает время, но если задали какое-то время например через какой то объект, то тогда время будет идти от выставленного до 0.
Заранее большое спасибо откликнувшимся).
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

5
Evgenii Legotckoi
  • 26. April 2016 10:13
  • Die Antwort wurde als Lösung markiert.

Приветствую.

Что касается клика по самому таймеру, то на скорую руку я бы предложил отслеживать сам клик в QML слое. А запущен ли таймер или нет, то можно добавить Q_INVOKABLE метод, в котором проверять, запущен ли таймер, или нет. Пример из урока можно доработать следующим образом.

ClockCircle {
    id: clockCircle
    // код из урока
    MouseArea {
        anchors.fill: parent
 
        onClicked: {
            if(clockCircle.isRunning()) {
                clockCircle.stop();
            } else {
                clockCircle.start();
            }
        }
    }
}

В заголовочном файле таймера

public:
    Q_INVOKABLE bool isRunning();

Ну и определение самого метода сделать следующее

bool ClockCircle::isRunning()
{
    return internalTimer->isActive();
}

То есть растягиваем MouseArea на область таймера и через его метод клика проверяем состояние таймера.

Относительно второй части, то можно использовать, допустим, LineEdit для задания значения таймера. Для упрощения задания таймера из QML можно, как вариант, превратить internalTimer в свойство Q_PROPERTY, чтобы он был доступен для прямого воздействия из QML.

    BlinCT
    • 26. April 2016 10:44
    Спасибо за совет по поводу задавания времени, но это получается что надо на QML слой кидать виджет LineEdit. Нету случаем у QML что то на подобии ComboBox или выпадающего списка?
    Может я ошибаюсь но мне кажется плодить на QML слое несколько или много виджетов QT не очень хорошо.
      Evgenii Legotckoi
      • 26. April 2016 10:51

      В QML есть ComboBox. Сделайте пробный проект с qml.ui файлом и посмотрите в визуальном конструкторе, какие есть объекты и типы. ComboBox должен быть в QtQuick.Controls.

        iG
        • 26. April 2016 10:52

        Может я ошибаюсь но мне кажется плодить на QML слое несколько или много виджетов QT не очень хорошо.

        Только кажется

        Нету случаем у QML что то на подобии ComboBox или выпадающего списка?

        http://doc.qt.io/qt-5/qtquick-controls-qmlmodule.html

          BlinCT
          • 26. April 2016 11:48
          Спасибо за подсказку.
          Сорян за глупые вопросы по поводу combobox, еще плохо ориентируюсь в QML.

            Kommentare

            Nur autorisierte Benutzer können Kommentare posten.
            Bitte Anmelden oder Registrieren
            Letzte Kommentare
            ИМ
            Игорь Максимов5. Oktober 2024 07:51
            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55. Juli 2024 11:02
            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssr8. Februar 2024 18:43
            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVA25. Dezember 2023 10:30
            Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            Jetzt im Forum diskutieren
            J
            JacobFib17. Oktober 2024 03:27
            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
            JW
            Jhon Wick1. Oktober 2024 15:52
            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
            КГ
            Кирилл Гусарев27. September 2024 09:09
            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
            F
            Fynjy22. Juli 2024 04:15
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

            Folgen Sie uns in sozialen Netzwerken