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

Пишу в 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
Вызов функции С++ из Qml, Qt
    #38669289
Anarchist_42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вызов функции С++ из Qml, Qt
    #39538662
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел бы запустить простой код qml в qtcrеаtor 8.5 Там используется qt quick 2.0 однако собрать/скомпилировать код невозможно. Функция меню сборки (первые два) неактивны. И в коде подчеркнуты строки что используется qt quick 1.0 вместо qt quick 2.0 или что такое? Что надо сделать чтобы запустить код qml - весь qt не хочется менять.
...
Рейтинг: 0 / 0
Вызов функции С++ из Qml, Qt
    #39539262
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции С++ из Qml, Qt
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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