Russian Qt Forum

Qt => Общие вопросы => Тема начата: PulSar.CE3194694 от Апрель 28, 2010, 20:08



Название: Как передать все значения из таблицы в одной функции в другую?
Отправлено: PulSar.CE3194694 от Апрель 28, 2010, 20:08
Добрый день!
Есть проблема - не знаю как передать значения, записанные в таблицу в одной функции в другую, чтобы она их считала. Кратко о том, что я делаю.

Создал диалог, в котором на экран монитора выводиться пустая таблица. Пользователь должен вбить в нее некоторые числа, при необходимости юзер с помощью кнопки "Добавить строку" может добавить в таблицу еще строки и вписать в них значения. Далее я в моей этой функции делаю перевод данных ячеек в формат float, далее эти числа записываю в многомерный (двумерный) массив (например Values[N][2]), где N  - итоговое количество строк в нашей таблице. После этого эмитируется мною созданный сигнал из этой функции, в котором я пытаюсь сказать, что передаются этот массив, размерность и кое-какие другие параметры. Этот сигнал принимает некоторый слот, в котором, исходя из введенных значений, рассчитывается некоторая величина.

Проблема в том, что я не знаю, как правильно создать сигнал (как должны быть указаны в нем аргументы) и слот (аналогично). Собственно, как передать двухмерный массив в слот через сигнал?

помогите пожалуйста! Если нужно, могу выложить код.


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: 0xFF от Апрель 28, 2010, 20:51
Если двумерный массив с участием N, то видимо он создается так?
Код
C++ (Qt)
float **myArr = new float*[N];
for(size_t i=0; i<N; ++i)  myArr[i] = new float[2];
Если так то в сигнал/слот просто передать myArr
Код
C++ (Qt)
void mySignal(float**, size_t);
...
emit mySignal(myArr, N);


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: PulSar.CE3194694 от Апрель 29, 2010, 20:35
Нет, создавал так:

int N;
N=//тут какнибудь присваиваем значение.
double Array[N][2];


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: 0xFF от Апрель 29, 2010, 21:13
А разве такое компилируется?
Попробуй так передать:

Код
C++ (Qt)
void mySignal(double arr[][2], size_t N);

в коде просто:
Код
C++ (Qt)
int N;
N=...
double Array[N][2];
emit mySignal(Array, N);


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: PulSar.CE3194694 от Май 01, 2010, 12:46
Забил на эти массивы. Удалось просто разбить на 2 отдельных массива. А их передать просто как указатель.


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: PulSar.CE3194694 от Май 03, 2010, 13:28
Теперь другой вопрос: как передать массив (double или QPointF) в void paintEvent(QPaintEvent *event)? Данный массив создавался в вообще отдельном классе (а точнее в одной из функций этого класса), а пейнтэвент объявлен в классе Главного Окна. Вот если его передать в созданную мною функцию, то без проблем, передаю указатель. А туда не знаю как... Ведь добавлять аргументы в paintEvent нельзя, не будет рисовать.

Придумал способ: перебросить все значения этого массива в массив, который я непосредственно создам в private или public зонах класса Г.О. Тогда paintEvent его будет видеть и нарисует. Но тогда не знаю как его объявить. Так: QPointF NewArray[N]  - не получается, пишет кучу ошибок. Как тогда сделать? Или можно вообще по-другому, без создания нового массива? Помогите плиз!  :)


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: 0xFF от Май 03, 2010, 20:00
Код
C++ (Qt)
QPointF *NewArray;
и в paintEvent
NewArray = new QPointF[N];

не годится?


Название: Re: Как передать все значения из таблицы в одной функции в другую?
Отправлено: PulSar.CE3194694 от Май 03, 2010, 20:58
Да, спасибо! Уже разобрался! :) :)