我在QT中宣布了一个信号:
signals:
void onResult(int,int[],int,int);
和一个插槽:
public slots:
void onBinarySearchComplete(int valueToSearchFor, int array[], int arraySize, int valueIndex); //this slot is connected to the onResult of the BinarySearch class.
我在MainWindow类中将数组声明为全局对象。
int* m_array;
稍后动态分配内存,
//create a random array to search.
int arraySize = 50;
m_array = new int[arraySize];
然后我将数组传递给BinarySearch对象,该对象也是全局声明的。
//call the search
int returnVal= s->search(searchValue,m_array,arraySize); //the binarysearch class will emit the onResult signal when the search is complete.
在我的BinarySearch对象中,我对数组进行排序,然后在数组内部搜索元素。 我可以在调用emit之前将数组打印到qDebug()。
//this is the code that emits the signal in my BinarySearch class//
qDebug()<<"Printing Array Just Before Emit";
printArrayToDebug(array,arraySize);//the array is correct here!
emit onResult(valueToSearchFor,array,arraySize,halfWayIndex);
此时,数组包含我已放入其中的元素,并且它是有序的。但是,当在插槽中接收到阵列时,阵列看起来是新的,并且充满了废话。
//This is the slot the receives the signal in my MainWindow class//
void MainWindow::onBinarySearchComplete(int valueToSearchFor, int array[], int arraySize, int valueIndex){
//this array appears uninitialized!
for(int i=0;i<arraySize;i++){
qDebug()<<array[i];
}
我认为在这种情况下C ++会将数组作为int *传递,并且这仍然有用。这是不正确的?如果是这样,我应该如何在这些对象之间正确传递这个数组呢?