[Qt] QListView_indexAt and QAbstractItemModel_index

Павел Ишенин webpirat at mail.ru
Wed Aug 29 10:47:13 CEST 2007


Den Jean wrote:
> On Tuesday 28 August 2007 19:47:24 Павел Ишенин wrote:
>   
>> Hello, Items specific to the Qt widget set
>>
>> Is it ok to write such contructions:
>>
>> function TQtListWidget.IndexAt(APoint: PQtPoint): Integer;
>> var
>>   AModelIndex: QModelIndexH;
>> begin
>>   AModelIndex := QModelIndex_create();
>>   QListView_indexAt(QListWidgetH(Widget), AModelIndex, APoint);
>>   Result := QModelIndex_row(AModelIndex);
>> end;
>>
>> I mean such will be better:
>>   AModelIndex := QListView_indexAt(QListWidgetH(Widget), APoint);
>>   Result := QModelIndex_row(AModelIndex);
>>
>> Maybe I misunderstand something?
>>     
>
> When a function result is a Qt Class without a "*" (so not a pointer to
> a class instance), you are not supposed to keep it around. 
> In C++ you would immediately assign it (copy into) another c++ class instance.
> The c++ compiler knows how. The pascal compiler does not know how
> to copy an instance into another. The binding could return a pointer
> to the instance, but would the violate the c++ header. Therefore I chose to 
> make all Qt Classes function results (without *), parameters instead, and let
> the c++ compiler do the copying inside the binding. You have to create an instance 
> ofcourse.
>
> C++:
> void test {
> QModelIndex model;   // -> instantiate instance on stack
> model = SomeAbstractItemView->indexAt(somePoint); // c++ does the copying 
> } // --> model get destroyed from stack by compiler
>
> pascal:
> procedure test;
> begin
> var model QModelIndexH;
> model:=QModelIndex_create;// -> instantiate instance on stack
> AbstractItemView_indexAt(SomeAbstractItemView,model,somePoint);  // c++ does the copying in the binding.
> QModelIndex_destroy(model);  // you have to destroy manually 
> end;
>
> I you prefer me not doing this, we can try to revert
> and see what happens. I am not sure this was necessary.
>   
No need for revert.  I added destroy calls after that. Thanks.

Best regards,
Paul Ishenin.



More information about the Qt mailing list