Hi all.
i want to customize the listview in QT Symbian. so for the customization purpose i have set delegate for the listview. and i am handling the paint event also.. the problem is the text colour.
i am not getting the default text colour, when the item is selected from the listview.
i am facing the problem, only when the item is selected non selected item colour is fine.
in the below sample code,i have two strings namely "item"(main-string) and "Test"(sub-string)
main-string("item") string draw with default selection color, but the sub-string("Test) will not draw with same color as main string.
i think we need to handle the selection and getting pallet color or some sort of logic is required i guess..
i am not getting the exact way..
pls give me the solution.
here is the codeThanksCode:class SettingDeligate : public QStyledItemDelegate { // Q_OBJECT public: explicit SettingDeligate(QObject* parent = 0); virtual ~SettingDeligate(); enum ItemDataRole {SubheaderTextRole = Qt::UserRole + 100}; QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; }; SettingDeligate::SettingDeligate(QObject* parent) : QStyledItemDelegate(parent) { } SettingDeligate::~SettingDeligate() { } QSize SettingDeligate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); QString line1 = index.data(Qt::DisplayRole).toString(); QString line2 = index.data(SubheaderTextRole).toString(); int textW = qMax(option.fontMetrics.width(line1), option.fontMetrics.width(line2)); //QSize iconSize = icon.actualSize(option.decorationSize); QSize iconSize(27,19); return QSize(qMax(textW, iconSize.width()) + 4, iconSize.height() + 2 + option.fontMetrics.lineSpacing() * 2 + 4); } void SettingDeligate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyledItemDelegate::paint(painter,option,index); QString headerText(qvariant_cast<QString>(index.model()->data(index, SubheaderTextRole))); QPoint point1 (option.rect.topLeft()); painter->drawText(point1.x()+25,point1.y()+25,headerText); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QListView *MylistView = new QListView(); MylistView->setViewMode(QListView::ListMode); MylistView->setMovement(QListView::Free); MylistView->setItemDelegate(new (SettingDeligate)); MylistView->setSelectionMode(QAbstractItemView::SingleSelection); QStandardItemModel *model = new QStandardItemModel(); MylistView->setModel(model); QStandardItem *item = new QStandardItem("item1"); item->setData("Test1", SettingDeligate::SubheaderTextRole); model->appendRow(item); QStandardItem *item1 = new QStandardItem("item2"); item1->setData("Test2", SettingDeligate::SubheaderTextRole); model->appendRow(item1); QStandardItem *item2 = new QStandardItem("item3"); item2->setData("Test3", SettingDeligate::SubheaderTextRole); model->appendRow(item2); QDesktopWidget* desktopWidget = QApplication::desktop(); //get client rect. QRect clientRect = desktopWidget->availableGeometry(); MylistView->setGeometry(clientRect); MylistView->show(); return a.exec(); }

Reply With Quote



