crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Массивы в сигналах/слотах
urandom
  опции профиля:
сообщение 13.12.2011, 21:46
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.11.2011
Пользователь №: 2983

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




Репутация:   0  


Приветствую

Такой вот вопросик. Как можно через сигналы/слоты передать массив элементов с плавающей точкой (float)?
Советовали использовать QVector, но функция, которая отдает мне массив с QVector работать не может. А перекидывать все это из массива в QVector циклами как-то стремно (может есть другой вариант?). Да и медленно. Может объявить структуру с этим массивом и уже работать с ней? Будет ли это адекватным решением?
В общем нужно оптимальное и быстрое решение..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 14.12.2011, 4:35
Сообщение #2


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

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

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




Репутация:   3  


Через указатель не пробовали?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.12.2011, 6:34
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


urandom, если массив никуда не денется, то можно передать указатель на него. Если "денется", то создать копию массива в куче, передать указатель. А в приёмнике по месту решить, что делать дальше. Ну и не забыть потом как-нибудь вернуть память в кучу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
urandom
  опции профиля:
сообщение 14.12.2011, 11:42
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.11.2011
Пользователь №: 2983

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




Репутация:   0  


Что-то туплю я с указателем..
Может через typedef..
typedef float data[1024]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.12.2011, 13:23
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


и чо (с)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 14.12.2011, 17:17
Сообщение #6


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

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

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




Репутация:   3  


Вот пример:
class Name: public QObject
{
    Q_OBJECT
public slots:
    void ReceiveData(float *x);
signals:
    void SendData(float *x);
}

    float x[] = {0.1, 0.2, 0.3, 0.4, 0.5};
    connect (this, SIGNAL(SendData(float*)), this, SLOT(ReceiveData(float*)));
    emit SendData(x);

void Name::ReceiveData(float *x) {
    //тут работаем с массивом
}


Цитата
Может через typedef

typedef тут вообще не причем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.12.2011, 17:50
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


лично я бы даже передавал указатель на контейнер, чем на массив )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
urandom
  опции профиля:
сообщение 18.12.2011, 22:05
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.11.2011
Пользователь №: 2983

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




Репутация:   0  


И как мне массив отправить в контейнер? Циклами перегнать?
Нет уж..
Мне нельзя использовать переменные других типов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.12.2011, 7:35
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


urandom, надо сразу там хранить ) Ну а если по некоторым причинам так нельзя сделать, то передавать надо не только указатель на начало массива, но и количество элеметнов

а циклы не нужны:

float data[1024];

std::vector<float>* p=new std::vector<float>(data,data+sizeof(data)/sizeof(*data));

ReceiveData(p);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
urandom
  опции профиля:
сообщение 19.12.2011, 13:12
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.11.2011
Пользователь №: 2983

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




Репутация:   0  


количество элементов тоже строго определено и не изменяется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.11.2024, 13:46