gpt4 book ai didi

c++ - 自定义委托(delegate) Paint 在编辑时保持不变

转载 作者:行者123 更新时间:2023-11-30 03:47:40 24 4
gpt4 key购买 nike

作为学习 Qt 的一部分,我正在尝试编写自定义委托(delegate)和自定义模型。

我基于QAbstractTableModel 制作了一个简单的自定义模型。我没有做任何复杂的事情。它仅在其构造函数中生成数据并最低限度地实现纯虚函数。

我制作了一个自定义委托(delegate),它以柱形显示数字数据。我还实现了一个旋转框作为编辑器来编辑数据。

该程序运行良好。我可以通过带有委托(delegate)集的 QTableView 查看、编辑和修改数据。

但是有个小问题。当我调用编辑器时,数据栏仍然存在,这意味着我在背景上看到数据栏,在顶部看到旋转框。

最初,我认为是因为QAbstractTableModel::data()中的Qt::EditRole没有设置好。但是,令人惊讶的是,我发现从未调用过 Qt::EditRole

那么,有两个问题:

  1. 如何在使用旋转框编辑器时删除数据栏?

  2. 为什么在我的自定义模型中从未调用过 EditRole

这是我的部分代码:

我的自定义模型:

MyModel::MyModel(QObject* parent):QAbstractTableModel(parent)
{
for (int i = 0; i < 10; ++i)
localData.push_back(i*i);
}

QVariant MyModel::data(const QModelIndex &index, int role) const
{
switch(role)
{
case Qt::EditRole:
qDebug() << "EditRole"; //Never Print Out
return 0;

case Qt::DisplayRole :
if (index.column() == 0)
return (index.row());

if (index.column() == 1)
return (localData.at(index.row()));
default:
return QVariant();
}
}

我的自定义委托(delegate):

void MyDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
painter->save();
painter->setPen(Qt::red);
painter->setBrush(Qt::red);

double factor = 0;
if (index.data().toDouble() > 100)
factor = 1;
else
factor = index.data().toDouble() / (double) (100.0);

painter->drawRect(option.rect.x()+5, option.rect.y()+3, (option.rect.width()-10)*factor, option.rect.height()-6);
painter->restore();
}

QWidget* MyDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QSpinBox* box = new QSpinBox(parent);
box->setMinimum(0);
box->setMaximum(100);
return box;
}

最佳答案

  1. 尝试为您的 View 设置 setAutoFillBackground(true)
  2. Editrole 未被调用,因为您的自定义编辑器未查询该数据的模型。您没有为旋转框设置任何值。尝试将其设置为:

    box->setValue(model.data(Qt::EditRole));

在 MyDelegate::createEditor() 函数中。

关于c++ - 自定义委托(delegate) Paint 在编辑时保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com