Реклама
  • EVILEG
  • Ответ
  • 22 октября 2017 г. 12:05

Закрепление якорей в момент создания объекта через JS

Добрый день!
Якоря - это не те свойства, которые можно устанавливать сразу по инициализации, лучше их править после создания объекта, поскольку при одновременной установке они могут вести себя как попало. В этой статье сказано про этот момент. Поэтому лучше последовательная смена значений якорей, когда объект будет создан.


А что касается вашего вопроса, то я переписал бы код так.
main.qml
import QtQuick 2.6
import QtQuick.Window 2.2
import "object_creation.js" as Logic

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Item {
        id: space
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom

        Rectangle {
            id: bluerect
            color: "blue"
            height: 300
            width: 300
            anchors.verticalCenter: parent.verticalCenter
            anchors.left: parent.left
        }
    }

    Component.onCompleted: {
        Logic.create_object()
    }
}

Tester.qml
import QtQuick 2.5
import QtQuick.Controls 1.4

Rectangle
{
    color: "green"
    height: 300
    width: 300
    anchors.verticalCenter: parent.verticalCenter
    anchors.horizontalCenter: parent.horizontalCenter
}

object_creation.js
var id_donor = 0; //переменная для установки id
var component;
var sprite;

/*
    ---------------------------------------------------------
    Функция создаёт объект,
    описанный в tester.qml
    между left_neighbor и right_neighbor
    или между left_neighbor/right_neighbor и границей parent
    или между границами parent

    left_neighbor - string (qml-id объекта слева)
    right_neighbor - string (qml-id объекта справа)
    ---------------------------------------------------------
*/
function create_object(left_neighbor, right_neighbor) {
    var params = {}; //параметры создаваемого объекта
    params.id = id_donor; //устанавливаем id нового элемента

    component = Qt.createComponent("Tester.qml");
    sprite = component.createObject(space, params);
    if (left_neighbor !== undefined)
    {
        sprite.anchors.horizontalCenter = undefined;
        sprite.anchors.left = left_neighbor.right;
    }
    if (right_neighbor !== undefined)
    {
        sprite.anchors.horizontalCenter = undefined;
        sprite.anchors.right = right_neighbor.left;
    }

    id_donor++;
}
  • Kiops
  • Вопрос
  • 22 октября 2017 г. 2:15

Закрепление якорей в момент создания объекта через JS

Dynamic QML Object Creation from JavaScript, Динамическое создание компонент, Динамическое создание объектов, Acnhors, Позиционирование

Доброго времени суток.
Столкнулся с проблемой: при динамическом создании компоненты якори (anchors), передаваемые как параметры при создании, не закрепляются. Прошу подсказать, что я делаю неправильно. Далее подробнее и с кодом.


Задача состоит в создании объектов внутри объекта Item в горизонтальный ряд, с возможностью добавления элементов в любом конце ряда.
Желаемый результат работы программы: при вызове create_object(null, null) создаётся зелёный квадрат по центру Item с id = space.
Фактический результат: зелёный квадрат создаётся по вертикальному центру, но у левого края объекта Item с id = space.
Иллюстрация в приложении

N.b. Код является лишь наброском и может содержать ошибки, не связанные с описанной проблемой.

object_creation_test.js:
var id_donor = 0; //переменная для установки id
var component;
var sprite;

/*
    ---------------------------------------------------------
    Функция создаёт объект,
    описанный в tester.qml
    между left_neighbor и right_neighbor
    или между left_neighbor/right_neighbor и границей parent
    или между границами parent

    left_neighbor - string (qml-id объекта слева)
    right_neighbor - string (qml-id объекта справа)
    ---------------------------------------------------------
*/
function create_object(left_neighbor, right_neighbor) {
    var params = {}; //параметры создаваемого объекта

    /* Если слева/справа имеется сосед, то прибиваем к нему якорь, в противном случае прибиваем якорь к родителю */
    params["anchors.left"] = (left_neighbor !== null) ? left_neighbor + ".right" : "parent.left";
    params["anchors.right"] = (right_neighbor !== null) ? right_neighbor + ".left" : "parent.right";

    params.id = id_donor; //устанавливаем id нового элемента

    component = Qt.createComponent("tester.qml");
    sprite = component.createObject(space, params);
    id_donor++;
}
tester.qml:
import QtQuick 2.5
import QtQuick.Controls 1.4

Rectangle
{
    color: "green"
    height: 300
    width: 300
    anchors.verticalCenter: parent.verticalCenter
}
Объект, в котором создаются объекты tester:
            Item {
                id: space
                anchors.top: row.bottom
                anchors.left: parent.left
                anchors.right: parent.right
                anchors.bottom: parent.bottom
            }
  • Mark
  • Комментарий
  • 10 октября 2017 г. 22:43

SFML - Урок 001. Подключение библиотеки SFML в проект на Qt

А нет все отлично работает и с jpg просто это из-за размеров картинки была проблема

float xScale = 800. / m_sprite.getTextureRect().width;
float yScale = 800. / m_sprite.getTextureRect().height;
Здесь подставил свои и все норм
  • EVILEG
  • Статья
  • 8 октября 2017 г. 2:46

SFML - Урок 001. Подключение библиотеки SFML в проект на Qt

SFML, Qt, C++, QWidget

SFML представляет собой объектно-ориентированный аналог SDL. Библиотека предоставляет простой доступ к системам ввода вывода, аудио, сети передачи данных, а также к функционалу OpenGL.

А что если дополнительно прикрутить к этой библиотеке ещё и функционал Qt, получить в управление мощные возможности сигналов и слотов, ресурсных файлов Qt? Что для этого потребуется?

  1. Скачать с GitHub последнюю версию исходников SFML .
  2. Скомпилировать исходники в библиотеку
  3. Создать проект Qt
  4. Подключить библиотеку в проект
  5. Написать виджет, который будет рендериться напрямую через функционал SFML
Реклама
  • BlinCT
  • 22 октября 2017 г. 12:46

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

  • Результат 64 баллов
  • Очки рейтинга -1
  • Kiops
  • 22 октября 2017 г. 3:56

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

  • Результат 86 баллов
  • Очки рейтинга 6
  • Kiops
  • 22 октября 2017 г. 2:41

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

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
  • EVILEG
  • 21 октября 2017 г. 3:06

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

Добавил архив с проектом

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

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

После работы поищу, должен где-то быть на винте.

  • Миша
  • 20 октября 2017 г. 20:04

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

не могли бы вы выложить архив с рабочей версией скрипта?

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

Qt/C++ - Урок 030. QCustomPlot - быстрый старт в работе с графиками

Использование дизайнера в Qt Creator и использование ui файлов является распространённой практикой в Qt фреймворке. Написать отдельную статью про то, что это такое? - может быть. Опи...

  • Миша
  • 20 октября 2017 г. 19:43

Qt/C++ - Урок 030. QCustomPlot - быстрый старт в работе с графиками

Но почему вы это не описали? Не могли бы вы описать.

Сейчас обсуждают на форуме
  • EVILEG
  • 22 октября 2017 г. 12:05

Закрепление якорей в момент создания объекта через JS

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

  • EVILEG
  • 21 октября 2017 г. 23:33

Создание истории редактирования постов на сайте

Ясно. Тогда я лучше не буду тратить время на его проверку. Тем более, что я использую гугловский prettyprint для подсветки кода. Спасибо за информацию.

QFile::copy() возвращает false

Получилось! Спасибо огромное! path1 = "C:/Users/555/Pictures/00GAF13AP001-002.jpg"true

  • cordsac
  • 19 октября 2017 г. 15:49

How can I select the QGraphicView Item and change the properties

Ok I'll check it sir,If you can please do article(tutorial) about this,Its really useful.Thank you if you can give me some sample code when you free.thanks again

  • cordsac
  • 17 октября 2017 г. 19:28

How can I open SVG file through QT

Okay,Thank you sir :)