[Qt] QListView_indexAt and QAbstractItemModel_index
Den Jean
Den.Jean at telenet.be
Tue Aug 28 22:38:32 CEST 2007
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.
> Best regards,
> Paul Ishenin.
> _______________________________________________
> Qt mailing list
> Qt at lazarus.freepascal.org
> http://www.lazarus.freepascal.org/mailman/listinfo/qt
More information about the Qt
mailing list