Qt 代码错误

Qt 代码错误,qt,listview,qt4,custom-controls,symbian,Qt,Listview,Qt4,Custom Controls,Symbian,在Qt中,我想在Qt Symbian中自定义listview。因此,出于定制目的,我为listview设置了委托。我也在处理油漆事件。。问题是文本的颜色 当从listview中选择项目时,我没有得到默认的文本颜色 i、 在示例代码下面,我有两个字符串,即“item”(主字符串)和“Test”(子字符串) 主字符串使用默认选择颜色绘制,但子字符串不会使用与主字符串相同的颜色绘制 我认为我们需要处理选择和获得托盘颜色。。我没有得到确切的方法 请给我答案 这是密码 class SettingDelig

在Qt中,我想在Qt Symbian中自定义listview。因此,出于定制目的,我为listview设置了委托。我也在处理油漆事件。。问题是文本的颜色

当从listview中选择项目时,我没有得到默认的文本颜色

i、 在示例代码下面,我有两个字符串,即“item”(主字符串)和“Test”(子字符串)

主字符串使用默认选择颜色绘制,但子字符串不会使用与主字符串相同的颜色绘制

我认为我们需要处理选择和获得托盘颜色。。我没有得到确切的方法

请给我答案

这是密码

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();
}
类设置Deligate:公共QStyledItemDelegate
{
//Q_对象
公众:
显式设置Deligate(QObject*parent=0);
虚拟~SettingDeligate();
enum ItemDataRole{SubheaderTextRole=Qt::UserRole+100};
QSize sizeHint(常数QStyleOptionViewItem&option、常数QModelIndex&index)常数;
无效油漆(QPainter*油漆工、常量QStyleOptionViewItem和option、常量QModelIndex和索引)常量;
};
SettingDeligate::SettingDeligate(QObject*父对象)
:QStyledItemDelegate(父级)
{
}
SettingDeligate::~SettingDeligate()
{
}
QSize设置Deligate::sizeHint(常量QStyleOptionViewItem&option,常量QModelIndex&index)常量
{
QIcon=qvariant_cast(index.data(Qt::DecorationRole));
QString line1=index.data(Qt::DisplayRole).toString();
QString line2=index.data(subheaderExtrole.toString();
int textW=qMax(option.fontMetrics.width(第1行),option.fontMetrics.width(第2行));
//QSize iconSize=icon.actualSize(option.decorationSize);
QSIconsize(27,19);
返回QSize(qMax(textW,iconSize.width())+4,
iconSize.height()+2+选项.fontMetrics.lineSpacing()*2+4);
}
无效设置Deligate::绘制(QPainter*painter,常数qStyleOption视图项和选项,常数QModelIndex和索引)常数
{
QStyledItemDelegate::paint(油漆工、选项、索引);
QString headerText(qvariant_cast(index.model()->数据(index,subheaderExtrole));
QPoint point1(option.rect.topLeft());
画师->绘图文本(point1.x()+25,point1.y()+25,headerText);
}
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QListView*MylistView=新的QListView();
MylistView->setViewMode(QListView::ListMode);
MylistView->setMovement(QListView::Free);
MylistView->setItemDelegate(新建(SettingDeligate));
MylistView->setSelectionMode(QAbstractItemView::SingleSelection);
QStandardItemModel*model=新QStandardItemModel();
MylistView->setModel(模型);
QStandardItem*项目=新QStandardItem(“项目1”);
item->setData(“Test1”,SettingDeligate::SubheaderTextOLE);
模型->追加行(项目);
QStandardItem*item1=新QStandardItem(“item2”);
item1->setData(“Test2”,SettingDeligate::SubheaderTextOLE);
模型->附录行(第1项);
QStandardItem*item2=新QStandardItem(“item3”);
item2->setData(“Test3”,SettingDeligate::SubheaderTextOLE);
模型->附录行(第2项);
QDesktopWidget*desktopWidget=QApplication::desktop();
//获取客户端rect。
QRect clientRect=desktopWidget->availableGeometry();
MylistView->setGeometry(clientRect);
MylistView->show();
返回a.exec();
}
请帮帮我

谢谢你试试这个-

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());
    QPalette::ColorGroup colorGroup = QPalette::Normal;
    if(!option.state.testFlag(QStyle::State_Enabled))
        colorGroup = QPalette::Disabled;
    else if (!option.state.testFlag(QStyle::Active))
        colorGroup = QPalette::Inactive;

    QPalette::ColorRole colorRole = QPalette::Text;
    if(option.state.testFlag(QStyle::State_Selected))
        colorRole = QPalette::HighlightedText;
    if(option.status.testFlag(QStyle::State_Editing))
        colorRole = QPallete::Text;
    painter->setPen(option.palette.color(colorGroup, colorRole));
    painter->drawText(point1.x()+25,point1.y()+25,headerText);
}
void SettingDeligate::paint(QPainter*painter,const QStyleOptionViewItem&option,const QModelIndex&index)const
{
QStyledItemDelegate::paint(油漆工、选项、索引);
QString headerText(qvariant_cast(index.model()->数据(index,subheaderExtrole));
QPoint point1(option.rect.topLeft());
Qpalete::ColorGroup ColorGroup=Qpalete::Normal;
if(!option.state.testFlag(QStyle::state_Enabled))
colorGroup=QPalette::已禁用;
如果(!option.state.testFlag(QStyle::Active))
colorGroup=QPalette::不活动;
Qpalete::ColorRole ColorRole=Qpalete::Text;
if(option.state.testFlag(QStyle::state_Selected))
colorRole=QPalette::HighlightedText;
if(option.status.testFlag(QStyle::State_编辑))
colorRole=QPallete::Text;
painter->setPen(option.palete.color(colorGroup,colorRole));
画师->绘图文本(point1.x()+25,point1.y()+25,headerText);
}

colorgroup/colorrole映射的状态来自CE_ItemViewItem元素的QCommonStyle::DrawControl的文本绘图部分。

这是symbian的Qt 4.6.2中的一个错误

希望它能在下一版本中得到修复

仅供参考


为什么禁用了Q_对象宏?@Karol,只有当我们在QT中使用信号和插槽时,才需要Q_对象宏。。对于元对象。。因为我这里没有信号槽。。所以它不是必需的嘿,当项目被选中时,我遇到了问题。。选择项目时,我没有获得要绘制的默认颜色