[Qt-interest] QTreeView, additional images
Thomas Ehrnhoefer
thomas.ehrnhoefer at tasktop.com
Tue Apr 26 19:47:02 CEST 2011
Currently investigating custom drawing, but i am failing to make the icon
appear.
I used to create the QStandardItem with a label and an icon, and it showed
up fine. Now I added my own QStyledItemDelegate implementation.
First of all, if I set .text on the QStyleOptionViewItem, it does not
override what is set on the QStandardItem (but if I invoke the empty
constructor there, the value I set in my delegate's paint method gets used).
This is a bit confusing as I would have thought that overriding the paint
method takes precedence over the QStandardItem's value.
Additionally (and more importantly) I am failing to draw an image. Again, I
was hoping just to set the new icon on the option, but that draws nothing.
Here is the code:
void MyItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
option, const QModelIndex &index) const
{
QStyleOptionViewItemV4 optionv4(option);
optionv4.text = "test";
optionv4.font.setBold(true);
optionv4.icon = imageProvider->icon(ImageProvider::MyImage);
QStyledItemDelegate::paint(painter, optionv4, index);
}
I am trying to understand the mechanisms before going into custom drawing,
but I seem to fail with this simple example.
Thanks for any input
Thomas
On Tue, Apr 26, 2011 at 7:32 AM, Thomas Ehrnhoefer <
thomas.ehrnhoefer at tasktop.com> wrote:
> Thanks Andre, Eckhard,
>
> I will see what I can find out about the things you mentioned.
> Sadly caching each of the images in composite form is less than ideal, as
> the combinations are plenty, and at least one of the images is retrieved
> from the network.
>
>
> On Tue, Apr 26, 2011 at 2:15 AM, Eckhard Jokisch <e.jokisch at orange-moon.de
> > wrote:
>
>> On Tuesday 26 April 2011 01:27:54 Thomas Ehrnhoefer wrote:
>> > Hi
>> >
>> > I have a TreeViewer, and I would like to have additional images
>> available.
>> > I don't want multiple columns, just additional decorations (images) to
>> > (some) of the items (e.g. a "changed" indicator). An example would be
>> > http://oboedit.org/docs/images/tree_view_single.png
>> >
>> > Since I am new to Qt, I am wondering what the best way (if there is any)
>> to
>> > do this would be. Most likely some custom drawing I assume, but I am
>> unsure
>> > on how/where to start.
>> >
>> > Any hints are very welcome
>> >
>> > Thanks
>> > Thomas
>>
>> I think what you are looking for is something like the below implemented
>> into
>> your ::data() function of the model where "item" is an item out of the
>> model
>> and the item->status() returns either CHANGED or UNCHANGED or somethins
>> else
>> useful.
>> The switch over the actual index.column() allows you to have different
>> icons in
>> different collumns - which you don't need right now but you never know
>> what's
>> coming next ;)
>>
>> Cheers
>> Eckhard
>> .....
>> QVariant YourModel::::data(const QModelIndex &index, int role) const
>> {
>> if (!index.isValid())
>> return QVariant();
>>
>> if (role == Qt::DecorationRole )
>> {
>> QPixmap p;
>>
>> switch(index.column())
>> {
>> case 0:
>> switch(item->status() )
>> {
>> case CHANGED:
>> p.load(":/icons/changed-icon.png");
>> break;
>> case UNCHANGED:
>> p.load(":/icons/unchanged-icon.png");
>> break;
>> default:
>> p.load(":/icons/some-icon.png");
>> break;
>> }
>> break;
>> case 1:
>> if(p.isNull())
>> {
>> p.load(":/icons/warn.png");
>> }
>> else
>> {
>> p.load(":/icons/ok.png");
>> }
>> break;
>> default:
>> break;
>> }
>> return p;
>> }
>> .....
>> }
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at qt.nokia.com
>> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>>
>
>
>
> --
> Thomas Ehrnhoefer
> Software Developer, http://tasktop.com
>
--
Thomas Ehrnhoefer
Software Developer, http://tasktop.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110426/59959ec2/attachment.html
More information about the Qt-interest-old
mailing list