如何解决在 Qt QStyledItemDelegate
我定义了一个继承自 MsgNameIdDelegate
的 qstyledItemDelegate
类:
头文件:
#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。
解决方法
您需要:(a) 删除 但是,请记住,使用 const
类的 paint
函数的声明中的 MsgNameIdDelegate
限定符告诉编译器该函数不会修改 strong> 调用它的类对象。但是,在该函数的定义中,您做(尝试)在 I = 10;
语句中修改对象。
const
限定符;或 (b) 将 I
成员声明为 static
(正如您所尝试的那样)然后提供该变量的定义(在您的源文件中),行类似于这个:int MsgNameIdDelegate::I{0};
static
选项意味着该 I
变量只有一个实例,由该类的所有对象共享。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。