Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / qt / 2009-11

New LCL override needed badly - TListView.OwnerData support - QTreeWidgetItem::data()

3 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

zeljko

Hi all,

Den,
I want to implement virtual list (TListView->OwnerData, TListView->OnGetData), but for that purpose I need QTreeWidgetItem::data() to be overriden, and our callback added so we have (this code below isn't tested just written to show what we need).Also this override can be used to set any type of roles (text,icon,checkbox) to QTreeWidgetItem.So, please if you can take a look into ASAP.
With this solution we don't use QTreeWidgetItem_setData(), but our callback just when somebody asks QTreeWidgetItem for data().

#ifndef QLCLTREEWIDGETITEM_H
#define QLCLTREEWIDGETITEM_H

#include <QtGui/qtreewidget.h>

class QLCLTreeWidgetItem : public QTreeWidgetItem {

public:

  //====================================================================================
  // need constructors with QTreeWidgetH + type and QTreeWidgetItemH +
  // type and QLCLTreeWidgetItemH + type
  QLCLTreeWidgetItem(QTreeWidget *parent = 0) : QTreeWidgetItem(parent) {
    dataOverride.func = NULL;
  };
  //====================================================================================
  void override_data(const QOverrideHook hook) {
    dataOverride = hook;
  }

private:

  //====================================================================================
  QOverrideHook dataOverride;
  //====================================================================================
  QVariant data(int column, int role) const {
    if (dataOverride.func) {
      // now we can ask TListView->Items->Caption and then
QTreeWidgetItem_setData()
      typedef void (*func_type)(void *data, int column, int role);
      (*(func_type)dataOverride.func)(dataOverride.data, column, role);
      }
    return QTreeWidgetItem::data(column, role);
  };
};

#endif

zeljko

Den Jean
to zeljko
zeljko wrote 8 lines
I want to implement virtual list (TListView->OwnerData, TListView->OnGetData), but for that purpose I need QTreeWidgetItem::data() to be overriden, and our callback added so we have (this code below isn't tested just written to show what we need).Also this override can be used to set any type of roles (text,icon,checkbox) to QTreeWidgetItem.So, please if you can take a look into ASAP. With this solution we don't use QTreeWidgetItem_setData(), but our callback just when somebody asks QTreeWidgetItem for data().

strange design, note that setData calls data on children (see qt source code)

I you want to have the data (strings,icons,...) stored in lcl (TOwnerDataListItem) you should only override ::data (and never use setdata as it would set data at the wrong side, namely Qt)

I you want to store the data in Qt, why do you not use setdata in the first place, whenever data is set in TListView calls.

strange, ...

also note that you should call     void emitDataChanged();
if you change data at the lcl side to notify qt (wiothout ever using setdata).

FYI: data in qt is stored in private (undocumented) ..... ./gui/itemviews/qtreewidget.h
QVector< QVector<QWidgetItemData> > values;

...../gui/itemviews/qwidgetitemdata_p.h
class QWidgetItemData
{
public:
inline QWidgetItemData() : role(-1) {}
inline QWidgetItemData(int r, QVariant v) : role(r), value(v) {}

    int role;
    QVariant value;
    inline bool operator==(const QWidgetItemData &other) { return role == other.role && value == other.value; }

};

enjoy:
http://users.telenet.be/Jan.Van.hijfte/qtforfpc/qt4pas-V1.73RC_Qt4.5.3.tar.gz http://users.telenet.be/Jan.Van.hijfte/qtforfpc/bin-qt4pas-V1.73RC_Qt4.5.3.tar.gz http://users.telenet.be/Jan.Van.hijfte/qtforfpc/demos-V1.73RC_Qt4.5.3.tar.gz (temp files, will be removed after release)

kind regards,

Den Jean

zeljko
to Den Jean

On Friday 27 November 2009 18:22, Den Jean wrote:
Hi Den,
Thanks, but I think that we don't need new bindings because of that. I've maded C thingz and tried, but now with pure implementation without bindings changes got same thing - I'm filling up needed data just before Qt paints item - so that's what we need - commited with r 22828 :) So pls. delete V1.73RC :)
Also, there's http://bugs.freepascal.org/view.php?id=15202 what I've done with bindings ( but we don't need it now).

zeljko