[Qt-interest] How to add more items in QListWidget

Siddu Hallikeri siddugh at gmail.com
Mon Jan 3 05:59:04 CET 2011


Hi Abhishek,

Here is the delegate painter code

Actually the requirement is

I get the data from the server, after parsing I get 3 Strings, one for
'title' , one for 'Description' and one string for image as URL.

I display the title and Description, first and I down load the image from
the url and add it cell (like I am displaying the data (text) as I get and
then image)

So I used the Custom Cell, so that I gave URL to that cell and it downloads
in it.

Does the paint method will draw all the items every time is add the item ?


void ListDelegate::paint ( QPainter * painter, const
QStyleOptionViewItem & option, const QModelIndex & index ) const

{

    QRect r = option.rect;

     //Color: #C4C4C4

    QPen linePen(QColor::fromRgb(211,211,211), 1, Qt::SolidLine);

     //Color: #005A83

    QPen lineMarkedPen(QColor::fromRgb(0,90,131), 1, Qt::SolidLine);

     //Color: #333

    QPen fontPen(QColor::fromRgb(51,51,51), 1, Qt::SolidLine);

     //Color: #fff

    QPen fontMarkedPen(Qt::white, 1, Qt::SolidLine);

     if(option.state & QStyle::State_Selected){

        QLinearGradient
gradientSelected(r.left(),r.top(),r.left(),r.height()+r.top());

        gradientSelected.setColorAt(0.0, QColor::fromRgb(119,213,247));

        gradientSelected.setColorAt(0.9, QColor::fromRgb(27,134,183));

        gradientSelected.setColorAt(1.0, QColor::fromRgb(0,120,174));

        painter->setBrush(gradientSelected);

        painter->drawRect(r);

         //BORDER

        painter->setPen(lineMarkedPen);

        painter->drawLine(r.topLeft(),r.topRight());

        painter->drawLine(r.topRight(),r.bottomRight());

        painter->drawLine(r.bottomLeft(),r.bottomRight());

        painter->drawLine(r.topLeft(),r.bottomLeft());

         painter->setPen(fontMarkedPen);

     } else {

        //BACKGROUND

        //ALTERNATING COLORS

        painter->setBrush( (index.row() % 2) ? Qt::white :
QColor(252,252,252) );

        painter->drawRect(r);

         //BORDER

        painter->setPen(linePen);

        painter->drawLine(r.topLeft(),r.topRight());

        painter->drawLine(r.topRight(),r.bottomRight());

        painter->drawLine(r.bottomLeft(),r.bottomRight());

        painter->drawLine(r.topLeft(),r.bottomLeft());

         painter->setPen(fontPen);

    }

     //GET TITLE, DESCRIPTION

    QIcon *ic=new QIcon(QPixmap(":/home.png"));

    QString title = index.data(Qt::DisplayRole).toString();

    QString description = index.data(Qt::UserRole + 1).toString();


//Icon

     if (!ic->isNull()) {

        //ICON

        r = option.rect.adjusted(0, 0, -10, -10);

        ic->paint(painter, r, Qt::AlignVCenter|Qt::AlignLeft);

    }

int imageSpace = 10;

if(!description.isNull())

{

      //TItle

    r = option.rect.adjusted(100, 0, -10, -30);

    painter->setFont( QFont( "Lucida Grande",r.height()-30, QFont::Bold ) );

    painter->drawText(r.left(), r.top(), r.width(), r.height(),
Qt::AlignBottom|Qt::AlignLeft, title, &r);


     //DESCRIPTION

    r = option.rect.adjusted(100, 0, -10, -30);

    painter->setFont( QFont( "Lucida Grande",r.height()-30, QFont::Normal ) );

    //painter->drawText(r.left(), r.top(), r.width(), r.height(),
Qt::AlignLeft, description, &r);

    painter->drawText(r, Qt::AlignCenter, description);

}



QSize ListDelegate::sizeHint ( const QStyleOptionViewItem & option,
const QModelIndex & index ) const{


    return QSize(270, 60);

}



Thanks,
Siddu

On Mon, Jan 3, 2011 at 10:08 AM, Abhishek <abhishekworld at gmail.com> wrote:

>
> Can you please share the Delegate code that way We can help you more .
> NOTE: Please keep Qt-interest at qt.nokia.com in cc or every mail easy way is
> to use replay all option and reply to mail in malling list :).
>
> On Mon, Jan 3, 2011 at 7:05 AM, Siddu Hallikeri <siddugh at gmail.com> wrote:
>
>> Hi Abhishek,
>>
>> Thanks for reply
>>
>> I tried with delegates by overriding the paint method
>> but, view is flickring..
>>
>>
>> On Mon, Jan 3, 2011 at 12:18 AM, Abhishek <abhishekworld at gmail.com>wrote:
>>
>>> Why dont you try using Delegates not sure about your case but making new
>>> Cell every time is not a good idea ..
>>>
>>> On Sun, Jan 2, 2011 at 11:00 PM, Siddu Hallikeri <siddugh at gmail.com>wrote:
>>>
>>>>
>>>> Hi all,
>>>>
>>>> How to add more items in QListWidget ?
>>>>
>>>> Below is the code I am using, it gives error as "memory full" in device
>>>> (N8)
>>>>
>>>> void gotItem(IndividualSearchData *item)
>>>> {
>>>>
>>>> Cell* cell = new Cell();
>>>> cell->setTitle(item->m_Title);
>>>> cell->setDescription(item->m_ShortDescription);
>>>> cell->setImage(item->m_IconURL);
>>>>
>>>> connect(cell,SIGNAL(imageButtonClicked(QPixmap)),this,SLOT(previewImage(QPixmap)));
>>>> QListWidgetItem *dataItem= new QListWidgetItem(ui->listWidget);
>>>>
>>>> dataItem->setSizeHint(QSize(430,189));
>>>> ui->listWidget->addItem(dataItem);
>>>> ui->listWidget->setItemWidget(dataItem,cell);
>>>>
>>>> }
>>>>
>>>>
>>>> Cell is a sub class of of QWidget and contains three labels "title",
>>>> "discription" and pass url as parameter.
>>>>
>>>> The cell download the image from this url.
>>>>
>>>> The gotItem method is called for about 400-500 times(whenever we get
>>>> data from server)
>>>>
>>>> I checked with memory, it keeps on increasing, but how to reduce this ?
>>>>
>>>> Please let me know how to achieve this.
>>>>
>>>>
>>>> Even I checked with 150 of items and stopped downloading image , still
>>>> it takes lot of memory
>>>>
>>>> Thanks in advance
>>>>
>>>> siddu
>>>> --
>>>> Siddu Hallikeri
>>>>
>>>> _______________________________________________
>>>> Qt-interest mailing list
>>>> Qt-interest at qt.nokia.com
>>>> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>>>>
>>>>
>>>
>>>
>>> --
>>> Abhishek Patil
>>> URL: http://thezeroth.net
>>> "Imagination is more important than knowledge..." -Albert Einstein
>>>
>>
>>
>>
>> --
>> Siddu Hallikeri
>>
>
>
>
> --
> Abhishek Patil
> URL: http://thezeroth.net
> "Imagination is more important than knowledge..." -Albert Einstein
>



-- 
Siddu Hallikeri
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110103/63505c6c/attachment.html 


More information about the Qt-interest-old mailing list