Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2014, 12:43   #1
Anarchist_42
Новичок
Джуниор
 
Регистрация: 12.06.2014
Сообщений: 2
По умолчанию Вызов функции С++ из Qml, Qt

Всем здравствуйте!

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

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

Код:
#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
Подпрограмма вывода изображения:

Код:
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, где я задаю параметры и вывожу изображение:

Код:
...
        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"

Заранее благодарен за помощь в решение проблемы!
Anarchist_42 вне форума Ответить с цитированием
Старый 14.06.2014, 12:23   #2
Anarchist_42
Новичок
Джуниор
 
Регистрация: 12.06.2014
Сообщений: 2
По умолчанию

Проблема решена!
Anarchist_42 вне форума Ответить с цитированием
Старый 13.10.2014, 18:37   #3
Foxter_stav
Заблокирован
 
Регистрация: 12.08.2014
Сообщений: 6
По умолчанию

Играть
Foxter_stav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции Diana528 Общие вопросы C/C++ 1 18.04.2013 21:56
вызов функции -Anton- Microsoft Office Excel 2 09.06.2011 14:18
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Вызов функции new player БД в Delphi 5 07.10.2010 13:01
Вызов функции MarSeON PHP 2 01.08.2008 20:22