crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Интеграция С++ в QML
Anarchist_42
  опции профиля:
сообщение 2.6.2014, 18:08
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем здравствуйте, возникли некоторые трудности в написание программы на qml.

Что мне надо: вывод на экран изображения (несколько вложенных колец) которое зависит от параметров (берутся из inputText), по кнопке, которая находится на другом rectangle, по другой кнопке рисунок должен удалятся.

Что имею: класс-наследник QQuickPaintedItem, могу рисовать все с параметрами-константами, прописанными в подпрограмме и подпрограмма вызывается из rectangle в котором надо рисовать.

Что не смог реализовать: рисование по кнопке, удаление, передача параметров из inputText в подпрограмму рисования.

Сможете с чем либо помочь? Я так понял что передачу можно осуществлять через QQmlContext, так ли это?

А так же, можно ли как-нибудь обойтись без С++ при открытие файла-справки из меню?
MenuItem{
                text: qsTr("Referense")
                onTriggered: "функция вызова справки"
                }


Буду очень благодарен за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 3.6.2014, 0:51
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Сигналы и слоты тебе в помощь.

А если можно, покажи код, а то не все понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anarchist_42
  опции профиля:
сообщение 3.6.2014, 10:35
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


import QtQuick.Controls 1.1
import QtQuick 2.2
import Qt3D 2.0
import Qt3D.Shapes 2.0
import Circle 1.0

ApplicationWindow {
    id: window
    visible: true
    width: 1024
    height: 600
    title: "Frenel"
    //Меню программы
    menuBar: MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Exit")
                onTriggered: Qt.quit()
            }
            MenuItem{
                text: qsTr("Referense")                   [color="#808080"]Что бы по нажатию запускался файл .chm[/color]
            }
        }
    }
    //Основное окно программы
    Image {
        id: image1
        height: 60
        anchors.fill: parent
        sourceSize.height: 600
        sourceSize.width: 1024
        source: "fon.jpg"
        //Загрузка модели
        Rectangle {...}
        //Изображение НГТУ
        Image {...}
        //Кнопка "Start"
        Rectangle{
            id: for_start;
            x: 600
            anchors.top: rectangle1.bottom
            anchors.topMargin: 11
            anchors.right: parent.right
            anchors.rightMargin: 424
            Button{
                id:start
                text:"Start"
//                onClicked: Circle.draw(slider1.value,slider1.value,                 [color="#808080"]По нажатию брал значения и [/color]
//                                       slider1.value,slider1.value)                           [color="#808080"]выводил на экран рисунок [/color]
            }
        }
        //Кнопка "Reset"
        Rectangle{
            id: for_reset
            x: 600
            anchors.top: rectangle1.bottom
            anchors.topMargin: 51
            anchors.right: parent.right
            anchors.rightMargin: 424
            Button{
                id:reset
                text:"Reset"
                onClicked: Circle.destroy();                                                [color="#808080"]По нажатию рисунок удалялся [/color]
            }
        }
        //Текстовое поле "Длина волны"
        Rectangle{...}
        //Текстовое поле "Радиус отверстия"
        Rectangle{...}
        //Текстовое поле "Раcстояние от источника до экрана с отверстием"
        Rectangle{...}
        //Текстовое поле "Расстояние от линзы до второго экрана"
        Rectangle{...}
        //Слайдер для "Длина волны"
        Rectangle{...}
        //Слайдер для "Радиус отверстия"
        Rectangle{...}
        //Слайдер для "Раcстояние от источника до экрана с отверстием"
        Rectangle{...}
        //Слайдер для "Расстояние от линзы до второго экрана"
        Rectangle{...}
        //Окно ввода значения для "Длина волны"
        Rectangle{...}
        //Окно ввода значения для "Радиус отверстия"
        Rectangle{...}
        //Окно ввода значения для "Раcстояние от источника до экрана с отверстием"
        Rectangle{...}
        //Окно ввода значения для "Расстояние от линзы до второго экрана"
        Rectangle{...}

      }
    //Малое окно для зон Френеля
    Rectangle {                                                                               [color="#808080"]Окошко где рисунок должен появляться[/color]
        id: rectangle2
        x: 800
        width: 214
        height: 214
        color: "#9795f9"
        anchors.right: parent.right
        anchors.top: parent.top
        anchors.rightMargin: 10
        anchors.topMargin: 10
        border.width: 2
//        Circle{
//            anchors.fill:rectangle1;
//        }
    }
}

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 4.6.2014, 2:54
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Как программа узнает где должен появиться рисунок?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anarchist_42
  опции профиля:
сообщение 4.6.2014, 8:07
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


В том то и дело, что я не знаю как это сделать в qml, в с++ я бы передал указатель на окно. А сейчас я вызывал программу из окна, где мне и надо было нарисовать, минуя кнопку "Start"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anarchist_42
  опции профиля:
сообщение 4.6.2014, 20:23
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


Справился с передачей параметров, теперь не могу разобраться, можно ли передать указатель на то окно в котором я хочу нарисовать, по кнопке "Start". Ну и как удалять это изображение(ничего кроме флажка мне не пришло в голову).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 5.6.2014, 1:05
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Цитата(Anarchist_42 @ 4.6.2014, 20:23) *
Справился с передачей параметров, теперь не могу разобраться, можно ли передать указатель на то окно в котором я хочу нарисовать, по кнопке "Start". Ну и как удалять это изображение(ничего кроме флажка мне не пришло в голову).


Как справился?

Под окном подразумевается виджет в котом все отрисовывается или участок в QML (Rectangle, Item и тд)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anarchist_42
  опции профиля:
сообщение 5.6.2014, 14:33
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


class Circle : public QQuickPaintedItem
{
    Q_OBJECT
    Q_PROPERTY(int radius READ radius WRITE setRadius NOTIFY RadiusChanged)
    Q_PROPERTY(int wavelength READ wavelength WRITE setWavelength NOTIFY WavelengthChanged)
    Q_PROPERTY(int distance_to_the_screen READ distance_to_the_screen WRITE setDistance_to_the_screen NOTIFY Distance_to_the_screenChanged)
    Q_PROPERTY(int distance_to_the_screen2 READ distance_to_the_screen2 WRITE setDistance_to_the_screen2 NOTIFY Distance_to_the_screen2Changed)
private:
    int _wavelength;
    int _radius;
    int _distance_to_the_screen;
    int _distance_to_the_screen2;
public:
    explicit Circle(QQuickItem *parent = 0);
    void paint(QPainter *painter);
    //Get-функции
    int radius();
    int wavelength();
    int distance_to_the_screen();
    int distance_to_the_screen2();
    //Set-функции
    void setWavelength(int &a);
    void setRadius(int &a);
    void setDistance_to_the_screen(int &a);
    void setDistance_to_the_screen2(int &a);
signals:
    //Сигналы для Set-функций
    void RadiusChanged();
    void WavelengthChanged();
    void Distance_to_the_screenChanged();
    void Distance_to_the_screen2Changed();
public slots:
};


Да, это rectangle ( в самом низу кода написан rectangle2). А кнопка вызывается из другого rectangle (rectangle1->for_start) ну и по нажатию на кнопку ресет рисунок должен исчезнуть (rectangle1->for_reset).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anarchist_42
  опции профиля:
сообщение 14.6.2014, 11:21
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 2.6.2014
Пользователь №: 4150

Спасибо сказали: 0 раз(а)




Репутация:   0  


Проблема решена!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 21:28