Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции С++ из Qml, Qt / 4 сообщений из 4, страница 1 из 1
12.06.2014, 13:09
    #38668400
Anarchist_42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции С++ из Qml, Qt
Всем здравствуйте!

Пишу в Qt5 на qml + c++.
Интересует решение проблемы: "Не могу вызвать правильно функцию отрисовки (рисует несколько вложенных окружностей в зависимости от параметров) по кнопке, а так же удалить изображение по другой кнопке." Одна из второстепенных проблем: не знаю как передавать указатель на rectangle (на форме несколько rectangle, рисовать надо только в одном из них).

Код класса на С++

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#ifndef CIRCLE1_H
 #define CIRCLE1_H
 #include <QObject>
 #include <QPainter>
 #include <QtQuick>
  
class circle1 : public QObject
{
     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 circle1(QObject *parent = 0);
//    //Запуск класса
//    void start(int &a,int &b,int &c,int &d);
     //Вывод изображения
     Q_INVOKABLE void draw(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();
     void PaintChanged();
public slots:
};
 #endif // CIRCLE1_H



Подпрограмма вывода изображения:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
void circle1::draw(QPainter *painter)
{
     painter->save();
  
     double m;
     QPen pen = QPen(Qt::NoPen);
     QBrush black_brush = QBrush(Qt::black);
     QBrush red_brush = QBrush(Qt::red);
     painter->setPen(pen);
     m=100000*(_radius*_radius)/_wavelength;
     m=m*(1/_distance_to_the_screen+1/(_distance_to_the_screen2-_distance_to_the_screen));
     int k=int(m);
     if(k!=0)
     {
         m=120/k;
         for(int i=1;i<=k;i++)
         {
             if(i%2==1)
             {
                 painter->setBrush(red_brush);
                 painter->drawEllipse(2+m*(i-1),2+m*(i-1),210-m*(i-1)*2,210-m*(i-1)*2);
             }
             else
             {
                 painter->setBrush(black_brush);
                 painter->drawEllipse(2+m*(i-1),2+m*(i-1),210-m*(i-1)*2,210-m*(i-1)*2);
             }
         }
     }
     else
     {
         int i;
         painter->setBrush(red_brush);
         painter->drawEllipse(2+m*(i-1),2+m*(i-1),210-m*(i-1)*2,210-m*(i-1)*2);
     }
     painter->restore();
     emit PaintChanged();
}



А вот кусок кода на qml, где я задаю параметры и вывожу изображение:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...
         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: {
                     Circle1.radius = slider2.value
                     Circle1.wavelength = slider1.value
                     Circle1.distance_to_the_screen = slider3.value
                     Circle1.distance_to_the_screen2 = slider4.value
                     Circle1.draw(rectangle2)
                 }
             }
         }
 ...



Ошибка которая появляется в "Вывод приложения" - "TypeError: Property 'draw' of object [object Object] is not a function"

Заранее благодарен за помощь в решение проблемы!
...
Рейтинг: 0 / 0
14.06.2014, 12:24
    #38669289
Anarchist_42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции С++ из Qml, Qt
Проблема решена!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.10.2017, 13:16
    #39538662
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции С++ из Qml, Qt
Хотел бы запустить простой код qml в qtcrеаtor 8.5 Там используется qt quick 2.0 однако собрать/скомпилировать код невозможно. Функция меню сборки (первые два) неактивны. И в коде подчеркнуты строки что используется qt quick 1.0 вместо qt quick 2.0 или что такое? Что надо сделать чтобы запустить код qml - весь qt не хочется менять.
...
Рейтинг: 0 / 0
20.10.2017, 00:39
    #39539262
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов функции С++ из Qml, Qt
import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Window 2.0 вот возле двух последних импортов пишет что: Модуль QМL не найден. Импортиртируемые пути: D:/qt/imports хотя там есть какие две папки. И вообще сам креатор и вся повторная инсталяция в D:/Qt1. Хотя полноценный проэкт делал когда то оттуда. Теперь понимаю что надо qt 5.2 и 5.1 для qt quick 2.2 и 2.1 Как тогда не устанавливать эти более поздние версии чтобы использовать 2.1/2.2? Для моей версии есть только qt quick 1.1 хотя после запуска простейшего кода пишет что Отлатчик не найден?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции С++ из Qml, Qt / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]