Реклама

Тег → QML

  • EVILEG
  • Статья
  • 14 сентября 2017 г. 2:05

QML - Урок 031. Отключаем системное обрамление окна в QML и пишем код для обработки перемещения и ресайза окна

QML, Qt, Frameless Window, Custom Style

Если по какой-то причине, вы решили отказаться от стандартного системного обрамления окна и реализовать все Title Bar`ы окна самостоятельно в QML, то вы вполне можете реализовать это средствами QML, что будет даже проще чем в C++, на мой взгляд. Для ознакомления можете посмотреть статью по кастомизации окна приложения в стиле AIMP . Там имеется значительная доля кода по реализации механики перемещания окна, а также его ресайза. Преимущество QML в данном случае состоит в том, что QML сразу обеспечивает верстку приложения, а значит можно с помощью MouseArea и якорей сразу определить нужную обработку при клике и перемещении мыши без каких-либо специальных расчётов положения курсора в области окна.

А механика расчёта изменения размеров и положения будет сходна с той, которая была применена в статье по кастомизации приложения в C++. То есть необходимо будет запомнить положение, где была нажата кнопка мыши, а потом уже относительно этого положения делать ресайз и перемещение окна приложения, пока кнопка не будет отпущена.

  • EVILEG
  • Статья
  • 5 июля 2017 г. 17:14

QML - Урок 030. Регистрация QML Типа в качестве Синглетон объекта

QML, singleton

Помимо C++ классов в QML в качестве Синглетона можно использовать и QML типы, которые представляют собой отдельные файлы QML.

Для этого также используется qmlRegisterSingletonType , но чтобы этот тип работал в качестве Singleton объекта, необходимо прописать в самом QML файле pragma Singleton.

Давайте сделаем небольшое приложение, которое будет выводить также несколько сообщения, при этом сообщения будут забираться через метод Singleton QML Типа.

  • EVILEG
  • Статья
  • 1 июля 2017 г. 16:03

QML - Урок 028. Регистрация пользовательских enum в QML

QML, enum, qmlRegisterType

Для того, чтобы использовать в QML перечисления enum, прописанные в C++, необходимо создать класс, наследованный от QObject, и зарегистрировать его в качестве QML Type перед запуском QML движка  в приложении.

Для изучения создайте проект с использованием QtQuick.

Минимальный вариант такого класса с перечислениям будет следующим:

#ifndef INFO_H
#define INFO_H

#include <QObject>

class Info : public QObject
{
    Q_OBJECT
public:
    enum State {
        Information,
        Debug,
        Warning,
        Error
    };
    Q_ENUM(State)
};

#endif // INFO_H
  • Troffe
  • Вопрос
  • 6 июня 2017 г. 17:01

Что выбрать?

Qt, QML, QWidget

Допустим я хочу реализовать подобный интерфейс что мне использовать QML или QWidget?

  • BlinCT
  • Вопрос
  • 6 апреля 2017 г. 14:43

Компановка обьектов внутри другого в QML

QML

Всем привет. Моя самая больная тема, это настройка QML обьектов) Задача такая, есть rectangle который должен принять высоту в зависимости от высоты детей которые вложены в него. Само собою внешний rectangle должен учитывать высоту уже внутреннего rectangle и кнопки что идет под ним.

Rectangle
{
            height: 140 * mm
            width: 130 * mm
            radius: 2 * mm
            x: (parent.width - width) / 2
            y: (parent.height - root.height) / 2

            color: "#FF4000"

            ColumnLayout
            {
                anchors.fill: parent
                anchors.margins: 2 * mm
                spacing: 2 * mm

                Rectangle
                {
                    id: rectangleMain
                    anchors.top: parent.top
                    anchors.left: parent.left
                    anchors.right: parent.right
                    color: "yellow"

                    Column
                    {
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.verticalCenter: parent.verticalCenter
                        spacing: 3 * mm

                        Rectangle
                        {
                            id: rectangle1
                            color: "#0174DF"

                            anchors.left: parent.left
                            anchors.right: parent.right
                            radius: 3 * mm
                            height: 20 * mm
                            Label
                            {
                                anchors.horizontalCenter: parent.horizontalCenter
                                text: _dialog.title
                                font.pixelSize: 5.1 * mm

                            }
                        }

                        Rectangle
                        {
                            id: rectangle2
                            color: "#0174DF"

                            anchors.left: parent.left
                            anchors.right: parent.right
                            radius: 3 * mm
                            height: 20 * mm

                            Label
                            {
                                anchors.left: parent.left
                                anchors.right: parent.right
                                anchors.fill: parent
                                text: _dialog.sender
                                textFormat: Text.StyledText
                                font.pixelSize: 4.7 * mm
                                wrapMode: Text.WordWrap
                                horizontalAlignment: Text.AlignHCenter

                            }
                        }

                        Rectangle
                        {
                            id: rectangle3
                            color: "#0174DF"

                            anchors.left: parent.left
                            anchors.right: parent.right
                            radius: 3 * mm
                            height: 20 * mm
                            Label
                            {
                                anchors.left: parent.left
                                anchors.right: parent.right
                                text: _dialog.name
                                textFormat: Text.StyledText
                                font.pixelSize: 4.7 * mm
                                wrapMode: Text.WordWrap
                                horizontalAlignment: Text.AlignHCenter

                            }
                        }

                        Rectangle
                        {
                            id: rectangle4
                            color: "#0174DF"

                            anchors.left: parent.left
                            anchors.right: parent.right
                            radius: 3 * mm
                            height: 30 * mm

                            Text
                            {
                                anchors.left: parent.left
                                anchors.right: parent.right
                                text: _dialog.description
                                textFormat: Text.StyledText
                                font.pixelSize: 4.4 * mm
                                width: _dialog.width
                                wrapMode: Text.WordWrap
                                horizontalAlignment: Text.AlignHCenter

                            }
                        }
                    }

                    Layout.fillHeight: true
                }

                RowLayout
                {
                    anchors.horizontalCenter: parent.horizontalCenter
                    spacing: 2 * mm
                    CButton {
                        text: "OK"
                        onClicked: {
                            _dialog.close()
                            _dialog.confirmed()
                        }
                        anchors.centerIn: parent
                        height: 20 * mm
                        width: 50 * mm
//                        Layout.fillWidth: true
                    }
                }
            }
        }
Заранее благодарю.
  • EVILEG
  • Статья
  • 3 апреля 2017 г. 0:22

PyQt5 - Урок 007. Работаем с QML QtQuick (Сигналы и слоты)

PyQt5, QML, QtQuick, Signal, Slot

А теперь более глубоко погрузимся в работу с Qt с помощью PyQt5, воспользовавшись современными возможностями Qt. Под такими возможностями я подразумеваю QtQuick и QML. PyQt5 позволяет использовать классы Qt, которые могут обрабатывать QML код, а следовательно, можно написать интерфейс на QML, а также передавать сигналы в QML слой и вызывать слоты объектов, наследованных от QObject из QML слоя.

Чтобы познакомиться с такими возможностями PyQt5, напишем программу, которая реализует следующие задачи:

  • Интерфейс программы должен быть написан на QML
  • Должен быть реализован класс, наследованный от QObject и написанный на python, с которым будем взаимодействовать из QML
  • Приложение с помощью данного класса должно будет складывать и вычитать целые числа

Внешний вид приложения должен выглядеть следующим образом:

  • BlinCT
  • Вопрос
  • 2 марта 2017 г. 19:45

Обращение в QML к стринговым данным или ENUM

C++, QML

Всем привет. Такой вопрос возник, есть куча стрингов, примерно такого типа

const QString Message095_Data::m_strTherapyType = "therapy_type";
const QString Message095_Data::m_strTherapyStep = "therapy_step";
const QString Message095_Data::m_strResults = "results";
const QString Message095_Data::m_strRecordedData = "recorded_data";
const QString Message095_Data::m_strExaminationType = "examination_type";
const QString Message095_Data::m_strSourceFilePath = "source_file_path";
const QString Message095_Data::m_strData = "data";
И таких данных(в моем случаи ключи) много. Удобство в том что в QML к ним можно обратится по точке, типа blabla.results и мы обращаемся к данным. Но, минус в том что если я где то пишу код то сделать ошибку даже в одной букве легко, и найти потом не просто. Мысль такая что как то все стринги обернуть в enum и если я буду обращаться то class_enum::results то это уже удобно но как потом к ним обращаться в QML? Буду признателен за совет или пример какой нибудь просто.
  • Rus6lan
  • Вопрос
  • 7 февраля 2017 г. 2:06

Управление QML объектами в JavaScript

JavaScript, QML

У меня есть JS файл, в котором я отправляю запросы, как мне в этой же функции управлять QML компонентами в main.qml или другом QML файле.

.pragma library
function login(username, password) {        
        var params = 'username=' + encodeURIComponent(username) +
        '&password=' + encodeURIComponent(password);
        var request = new XMLHttpRequest()
        request.open('POST', 'http://auth-test.app-labs.ru/api/login')
        request.onreadystatechange = function() {
            if (request.readyState === XMLHttpRequest.DONE) {
                console.log("Status", request.status)
                if (request.status && request.status === 200) {
                    console.log("response", request.responseText)                    
                } else {
                    console.log("HTTP:", request.status, request.statusText)
                }
            }
        }
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        request.send(params)    
}
  • EVILEG
  • Статья
  • 3 февраля 2017 г. 22:55

QML - Урок 027. Добавляем QML в проект на QWidget

QQuickWidget, QML, C++, QWidget

При разработке приложения на Qt может случиться такая ситуация, когда потребуется в приложение, написанное на QWidgets внедрить функционал, написанный на QML. Для решения подобной задачи может использоваться класс QQuickWidget , который служит для рендеринга QML.

Напишем простейший hello world, который позволит отрисовать код, написанный на QML в виджете, который помещён в окно, основанное на QWidget. Чтобы оно выглядело следующим образом:

  • BlinCT
  • Вопрос
  • 28 января 2017 г. 18:16

Подстановка контента в TabBar QML из других qml файлов

TabBar, TabButton, QML

Всем привет. Вопрос в работе TabBar, TabButton и контента из внешнего qml файла Имеется main.qml в котором мы создаем

 header: TabBar
    {
        id: tabBar
        TabButton
        {
            text: qsTr("Test1")
        }
        TabButton
        {
            text: qsTr("Test2")
        }
        TabButton
        {
            text: qsTr("Test3")
        }
    } //tabbar
Мы имеем нормальный набор вкладок. И вот теперь нужно в каждую вкладку запихнуть готовый контент из другого файла. Наткнулся на SwipeView но это вроде как не то что надо, выглядит как будто он выстроил их по порядку. А нужно получить именно в первой вкладке один контент, в другой вкладке другой и так далее. Такое разделение связано с тем что контент каждой вкладки не должен никак контактировать с другими. Буду признателен за помощь и советы. Или может другие варианты.
Реклама
  • MinusNol
  • 18 октября 2017 г. 16:09

C++ - Тест 003. Условия и циклы

  • Результат - 85 баллов
  • MinusNol
  • 18 октября 2017 г. 15:41

C++ - Тест 002. Константы

  • Результат - 58 баллов
  • loctyr
  • 18 октября 2017 г. 10:25

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

  • Результат - 94 баллов
Последние комментарии
  • EVILEG
  • 18 октября 2017 г. 14:45

QML - Урок 031. Отключаем системное обрамление окна в QML и пишем код для обработки перемещения и ресайза окна

Задать свои property в окне и проверять их в методах изменения размера для topArea, bottomArea, rightArea, leftArea. В обработчиках onMouseYChanged, onMouseXChanged. Из-за отключен...

  • Troffe
  • 18 октября 2017 г. 14:35

QML - Урок 031. Отключаем системное обрамление окна в QML и пишем код для обработки перемещения и ресайза окна

После отключения системного обрамления не работают minimumHeight и minimumWidth. Что делать?

  • cordsac
  • 17 октября 2017 г. 15:29

Qt/C++ - Урок 045. SvgReader на Qt. Восстановление данных из файла SVG в QGraphicsScene

Sir I post is as a topic,please help me to solve this problem

  • EVILEG
  • 17 октября 2017 г. 11:44

Qt/C++ - Урок 045. SvgReader на Qt. Восстановление данных из файла SVG в QGraphicsScene

I think You have another version of SVG file. First, need to see content of SVG file. It is simple XML-format, therefore just need to research content. Do You want just open SVG file or ...

  • cordsac
  • 17 октября 2017 г. 2:09

Qt/C++ - Урок 045. SvgReader на Qt. Восстановление данных из файла SVG в QGraphicsScene

Sir,I tried your code for open ellipse item.but my program not open ellipse item.what should I need to do? here is my code : readsvg.cpp QL...

Сейчас обсуждают на форуме
  • cordsac
  • 17 октября 2017 г. 19:28

How can I open SVG file through QT

Okay,Thank you sir :)

  • EVILEG
  • 16 октября 2017 г. 20:34

Qt, Загрузка изображения в QImage

Сам view нужно поместить в внутри окна, а не просто создать его. Можете создать в графическом редакторе Qt Creator`а окно, набросать там QGraphicsView и потом посмотреть в сгенерированном...

  • mihenze
  • 15 октября 2017 г. 21:30

Рисуем линию QGraphicsItem за мышью

Большое спасибо!

  • EVILEG
  • 15 октября 2017 г. 18:58

Описание класса С++ в QtCreator

Для начала добавьте недостающие методы и участники для Q_PROPERTY. Для этого вызовите контекстное меню через ПКМ у Q_PROPERTY, там будет пункт "добавить недостающие члены". Автоматически...

  • EVILEG
  • 15 октября 2017 г. 15:34

Qt+Google Drive

Добрый день! Как-то не занимался этим, поэтому такого примера у меня нет в загашниках.