微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Qt QStyledItemDelegate

如何解决在 Qt QStyledItemDelegate

我定义了一个继承自 MsgNameIdDelegateqstyledItemDelegate 类:

文件

#include <qstyledItemDelegate>

class MsgNameIdDelegate : public qstyledItemDelegate
{
    Q_OBJECT
public:
    MsgNameIdDelegate(QObject *parent = 0);

protected:
    void paint(QPainter *painter,const qstyleOptionViewItem &option,const QModelIndex &index) const;
    QSize sizeHint(const qstyleOptionViewItem &option,const QModelIndex &index) const;

private:
    int I;
};

#endif // MsgNameIdDelegate_H

文件

#include <QApplication>
#include <QPainter>

MsgNameIdDelegate::MsgNameIdDelegate(QObject *parent) : qstyledItemDelegate(parent)
{
}

QSize MsgNameIdDelegate::sizeHint(const qstyleOptionViewItem &option,const QModelIndex &index ) const
{
    qDebug()<<I;
}

void MsgNameIdDelegate::paint(QPainter *painter,const QModelIndex &index) const
{
    I = 10;
    QApplication::style()->drawItemText(painter,option.rect,Qt::AlignHCenter|Qt::AlignVCenter| Qt::TextLongestvariant,option.palette,true,"Example");
}

如您所见,我定义了一个I 命名的类变量。但是,当我编译代码时,出现以下编译错误

msgnameiddelegate.cpp:85:7: error: cannot assign to non-static data member within const member function 'paint'
msgnameiddelegate.cpp:77:25: note: member function 'MsgNameIdDelegate::paint' is declared const here

此外,当我将变量 I 定义为静态变量时,出现以下编译错误

in function `MsgNameIdDelegate::sizeHint(qstyleOptionViewItem const&,QModelIndex const&) const':
msgnameiddelegate.cpp:(.text+0x23b): undefined reference to `MsgNameIdDelegate::I'

注意:我在 Ubuntu 20.04 中使用 Qt 5.15.2。

解决方法

const 类的 paint 函数的声明中的 MsgNameIdDelegate 限定符告诉编译器该函数不会修改 strong> 调用它的类对象。但是,在该函数的定义中,您(尝试)在 I = 10; 语句中修改对象。

您需要:(a) 删除 const 限定符;或 (b) 将 I 成员声明为 static(正如您所尝试的那样)然后提供该变量的定义(在您的源文件中),行类似于这个:

int MsgNameIdDelegate::I{0};

但是,请记住,使用 static 选项意味着该 I 变量只有一个实例,由该类的所有对象共享。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。