QTableView 的单元格是空的,但标题显示

Posted

技术标签:

【中文标题】QTableView 的单元格是空的,但标题显示【英文标题】:QTableView's cells are empty, but headers show up 【发布时间】:2013-03-21 00:19:28 【问题描述】:

我创建了一个几乎从 Qt 的 Spin Box Delegate Example 复制的委托,并且我正在尝试填充 QTableView。但是,我遇到了一个奇怪的问题,表格标题显示但单元格为空且无法单击。

委托代码:

#include "double_spinbox_delegate.h"

DoubleSpinBoxDelegate::DoubleSpinBoxDelegate(QObject *parent) : QItemDelegate(parent)

QWidget *DoubleSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
    QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
    editor->setValue(0);

//    if (index.column() == 0)
//        editor->setMinimum(0);
//        editor->setMaximum(255);
//    
//    else
//        editor->setMinimum(0);
//        editor->setMaximum(1);
//    

    return editor;


void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
    double value = index.model()->data(index, Qt::EditRole).toDouble();

    QDoubleSpinBox *doubleSpinBox = static_cast<QDoubleSpinBox*>(editor);
    doubleSpinBox->setValue(value);


void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
    QDoubleSpinBox *doubleSpinBox = static_cast<QDoubleSpinBox*>(editor);
    doubleSpinBox->interpretText();
    double value = doubleSpinBox->value();

    model->setData(index, value, Qt::EditRole);


void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
    editor->setGeometry(option.rect);

以及我在表单构造函数中调用的函数

void MainWindow::InitializeColorTable()
    QTableView *tableColor = ui->tableColor;

    QStandardItemModel *model = new QStandardItemModel(4, 4, ui->tableColor);
    // QStandardItemModel *model = this->colorTableModel;
    tableColor->setModel(model);

    DoubleSpinBoxDelegate delegate;
    tableColor->setItemDelegate(&delegate);

    model->setHorizontalHeaderLabels(QStringList() << tr("Value") << tr("R") << tr("G") << tr("B"));

    for (int row = 0; row < model->rowCount(); ++row)
        for (int col = 0; col < model->columnCount(); ++col)
            QModelIndex index = model->index(row, col, QModelIndex());
            model->setData(index, QVariant((row + 1.0) * (col + 1.0)), Qt::EditRole);
        
    

【问题讨论】:

【参考方案1】:

您的委托在堆栈上分配,并在超出范围后被删除。

DoubleSpinBoxDelegate delegate;
tableColor->setItemDelegate(&delegate);

改为使用 new 创建您的委托。

【讨论】:

谢谢!我知道这将是需要一双新眼睛来识别的东西。

以上是关于QTableView 的单元格是空的,但标题显示的主要内容,如果未能解决你的问题,请参考以下文章

QTableView 并双击一个单元格

调整 JavaScript 中代码排序的输入

如何避免在页面之间拆分单元格的内容?

编辑 QTableView 单元格时设置初始文本

表格使用vlookup函数时出现内容是空白的,但是函数还在也没显示错误??

选择单元格时,更改 QTableView 中图标的颜色突出显示