Russian Qt Forum
Сентябрь 23, 2024, 10:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QVector  (Прочитано 9311 раз)
Firefox
Гость
« : Декабрь 24, 2012, 11:29 »

здравствуйте. подскажите как правильно записать данные в QVector. Есть структура
Код:
typedef struct
{
        short int leftAngle;
        unsigned short int leftValue;
        short int rightAngle;
        unsigned short int rightValue;
} MBESValueData;

... //далее в коде есть
 QVector<MBESValueData> *data;  // без итераторов именно в таком виде используется(программа не моя мне надо устранить ошибки,а такой вид контейнера далее везде возвращают функции)
как мне заполнить этот вектор данными правильно.
пыталась вот так
Код:
data->at(j).leftAngle=0;
 MBESValueData signal;
data.append(signal);
но компилятор не принимает.
подскажите пожалуйста.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 24, 2012, 11:31 »

data->append(signal);
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Декабрь 24, 2012, 11:34 »

ты в блокноте что ли пишешь? нормальная среда разработки автоматически вставляет точку или стрелочку в зависимости от того, является ли переменная указателем или нет.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Firefox
Гость
« Ответ #3 : Декабрь 24, 2012, 11:35 »

я так пробовала.ругается. про точку просто описалась.  так же пробовала data->push_back(signal);
пишет что-то вроде нельзя обратиться данным структуры которые предназначены только для чтения.
Записан
Firefox
Гость
« Ответ #4 : Декабрь 24, 2012, 11:36 »

нет пишу не в блокноте))просто на машине с мсвсом нет интернета, а под виндовсом есть. вот и написала эти сточки от руки.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Декабрь 24, 2012, 11:37 »

Давай больше кода.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Firefox
Гость
« Ответ #6 : Декабрь 24, 2012, 11:38 »

принимает при компиляции вот такой вариант
(*data)[j].leftAngle=  (short int)(sin_angle_norm * 32768.f);
 но вылетает в брейк программа на этой строке.
Записан
mutineer
Гость
« Ответ #7 : Декабрь 24, 2012, 11:40 »

Очень пригодится конкретный текст ошибок, которые выдает компилятор
Записан
Firefox
Гость
« Ответ #8 : Декабрь 24, 2012, 11:42 »

Код:
структура находиться в подключаемом файле
// пример функции где она испльзуется
void model_mle::imit_test_line_profil(float depth, unsigned int scale , QVector<MBESValueData> *pac_udp_data[4],QByteArray *pac[4] )
{

    // рТБЧЙМП ДМС ЪОБЛПЧ Х ХЗМПЧ:
    // ХЗМЩ ПФУЮЙФЩЧБАФУС ПФ ОПТНБМЙ Л БОФЕООЕ
    // ЪОБЛ НЙОХУ "-"  ДМС ХЗМПЧ ПФУЮЙФЩЧБЕНЩИ РП ЮБУПЧПК УФТЕМЛЕ
    // РМАУ "+" ДМС ХЗМПЧ РТПФЙЧ ЮБУПЧПК УФТЕМЛЙ
   // float angle_left_antenna = 60.f;
   // float angle_right_antenna = 120.f;
   // оБ ЫЛБМЕ 300Н ДМС ХЗМБ 15ЗТБД ЙНЕЕН ОБЛМПООХА ДБМШОПУФШ 311Н
    // тБЪОЙГБ (311-300Н)/SD=333 ПФУЮЕФБ РП ДБМШОПУФЙ
    float x;     // РМПУЛБС ДЙУФБОГЙС
    float dist;  // ОБЛМПООБС ДЙУФБОГЙС
    float sin_angle;
    float angle; // ХЗПМ ПФУЮЙФЩЧБЕНЩК ПФ ЧЕТФЙЛБМЙ
    float angle0; // ХЗПМ ПФУЮЙФЩЧБЕНЩК ПФ ОПТНБМЙ Л БОФЕООЕ
    float sin_angle_norm;
    float dr;     // ЫБЗ РП ДЙУФБОГЙЙ
    int j0;
    QVector<MBESValueData> *data;
    MBESValueData signal;
    unsigned short int size_pac[]={ 864, 2400, 4064, 4064 };
    int sz=size_pac[scale];
    DEBMESSAGE( JUNK, ("model_mle: start  imit_test_line_profil "));

    pac[0]->resize(256+sz*8); // ПЮЙЭБЕН ЧУЕ 4 ДБФБЗТБННЩ ?
    pac[1]->resize(256+sz*8);
    pac[2]->resize(256+sz*8);
    pac[3]->resize(256+sz*8);

    DEBMESSAGE( JUNK, ("model_mle: imit_test_line_profil ----->ok1a "));


    j0=(int)(depth/SD);
    for(int j=0; j<j0;  j++)
    {
      // это работает нормально
       data=setMBESValueDatagramm(j,scale,pac_udp_data);// функция возвращает QVector<MBESValueData>*

        signal.leftAngle= 0;
        signal.leftValue= 0;
        signal.rightAngle=0;
        signal.rightValue=0;
// далее пытаюсь записать signal в data
  }
....
}
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Декабрь 24, 2012, 11:48 »

Нельзя же так жестоко в понедельник... Такое ощущение, что все части Пилы увидел в одном посте. Грустный
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Firefox
Гость
« Ответ #10 : Декабрь 24, 2012, 11:54 »

неужели совсем все так плохо...
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Декабрь 24, 2012, 11:57 »

Цитировать
ты в блокноте что ли пишешь? нормальная среда разработки автоматически вставляет точку или стрелочку в зависимости от того, является ли переменная указателем или нет.

Значит VS - не нормальная среда! Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Декабрь 24, 2012, 11:57 »

QVector::at объявлен как константный, т.е. компилятор говорит правильно. Надо использовать (*data)[j], как Вы и сделали (ну или объявить ссылку чтобы не таскать все время звездочку). Однако судя по приведенному коду индекc j у Ввс явно "от фонаря"
Код:
    for(int j=0; j<j0;  j++)
    {
      // это работает нормально
       data=setMBESValueDatagramm(j,scale,pac_udp_data);// функция возвращает QVector<MBESValueData>*

        signal.leftAngle= 0;
        signal.leftValue= 0;
        signal.rightAngle=0;
        signal.rightValue=0;
// далее пытаюсь записать signal в data
  }
....
}
На каждой итерации Вы получаете указатель на вектор (массив), и пишете что-то в его j-й элемент, никак не заботясь об остальных - это может иметь смысл только если возвращаемый вектор тот же самый.

неужели совсем все так плохо...
Ну.. пока не очень хорошо  Улыбающийся
Записан
Firefox
Гость
« Ответ #13 : Декабрь 24, 2012, 12:26 »

а можно поподробнее. я хочу последовательно следовать от 0 элемента вектора и по нарастающей. j у меня в цикле от 0 и  идет. как мне тогда например позаботиться об остальных элементах??
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Декабрь 24, 2012, 12:45 »

а можно поподробнее. я хочу последовательно следовать от 0 элемента вектора и по нарастающей. j у меня в цикле от 0 и  идет. как мне тогда например позаботиться об остальных элементах??
Так я ж не знаю как и что Вы хотите заполнять. Напр setMBESValueDatagramm каждый раз создает новый вектор который нужно заполнить, или вектор один и тот же? И кто задает число элементов в векторе?  Если просто вектор с начальными значениями, то лучше так

Код
C++ (Qt)
struct MBESValueData
{
// нужен конструктор по умолчанию
       MBESValueData( void ) : leftAngle(0), leftValue(0), rightAngle(0), rightValue(0) {}
 
       short int leftAngle;
       unsigned short int leftValue;
       short int rightAngle;
       unsigned short int rightValue;
};
Тогда создать или заполнить можно 1 вызовом
Код
C++ (Qt)
data = new QVector<MBESValueData>(10);  // 10 элементов (с нулями)
data->resize(20);  // теперь 20
 
« Последнее редактирование: Декабрь 24, 2012, 13:06 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 23.