SpinBoxDelegate displayed as a DoubleSpinBoxDelegate



我已经为tableView创建了一个SpinBoxDelegate。当我在表中编辑整数值(QVariant(时,即使它是一个QSpinBoxeditorWidget的行为也像一个QDoubleSpinbox

我使用的是QT 5.5.1而不是当前版本,我从Qt文档中获取了委托的代码

QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
                                   const QStyleOptionViewItem &/* option 
*/,
                                   const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setFrame(false);
/*editor->setMinimum(0);
editor->setMaximum(100);*/
return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
                                const QModelIndex &index) const
{
int value = index.model()->data(index, Qt::EditRole).toInt();
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                               const QModelIndex &index) const
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}

我希望显示的小部件没有小数。

这是导致麻烦的代码...由于 QVariant 中的值不是整数而是双精度值,因此我从未分配委托......

for(int col = 1; col < mModel->columnCount() ;col++){
    QVariant::Type colType = mModel->data(mModel->index(0,col), Qt::DisplayRole).type();
    switch(colType){
        case QVariant::Int:
            ui->tableView->setItemDelegateForColumn(col, sbDelegate);
            break;
        case QVariant::String:
            break;
        case QVariant::Double:
            break;
        default: break;
    }
}

您的委托似乎没有任何问题。请仔细比较我发布的解决方案与您自己的代码。对于将来,创建可重现的最小示例会有所帮助。

主.cpp

#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include "SpinboxDelegate.h"
int main(int argc, char** args) {
    QApplication app(argc, args);
    auto tableView = new QTableView;
    auto model=new QStandardItemModel;
    model->setRowCount(2);
    model->setColumnCount(2);
    tableView->setModel(model);
    tableView->setItemDelegate(new SpinBoxDelegate);
    tableView->show();
    app.exec();
}

SpinboxDelegate.h

#include <QStyledItemDelegate>
class SpinBoxDelegate : public QStyledItemDelegate
{
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex & ) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
};

旋转框代表.cpp

#include "SpinboxDelegate.h"
#include <QSpinBox>
QWidget *SpinBoxDelegate::createEditor(QWidget *parent,
                                   const QStyleOptionViewItem &/* option 
*/,
                                   const QModelIndex &/* index */) const
{
QSpinBox *editor = new QSpinBox(parent);
editor->setFrame(false);
/*editor->setMinimum(0);
editor->setMaximum(100);*/
return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
                                const QModelIndex &index) const
{
int value = index.model()->data(index, Qt::EditRole).toInt();
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->setValue(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                               const QModelIndex &index) const
{
QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}

相关内容

  • 没有找到相关文章

最新更新