C++ SpinBoxDelegate显示为DoubleSpinBoxDelegate

C++ SpinBoxDelegate显示为DoubleSpinBoxDelegate,c++,qt,delegates,qwidget,C++,Qt,Delegates,Qwidget,我已经为tableView创建了一个SpinBoxDelegate。当我在表中编辑整数值(QVariant)时,editorWidget的行为类似于QDoubleSpinbox,即使它是QSpinBox 我使用的QT 5.5.1不是当前版本,我从 QWidget*SpinBoxDelegate::createEditor(QWidget*parent、, 常量QStyleOptionViewItem&/*选项 */, 常数QModelIndex&/*索引*/)常数 { QSpinBox*编辑器=

我已经为tableView创建了一个
SpinBoxDelegate
。当我在表中编辑整数值(QVariant)时,
editorWidget
的行为类似于
QDoubleSpinbox
,即使它是
QSpinBox

我使用的
QT 5.5.1
不是当前版本,我从

QWidget*SpinBoxDelegate::createEditor(QWidget*parent、,
常量QStyleOptionViewItem&/*选项
*/,
常数QModelIndex&/*索引*/)常数
{
QSpinBox*编辑器=新QSpinBox(父项);
编辑器->设置框架(错误);
/*编辑器->设置最小值(0);
编辑器->设置最大值(100)*/
返回编辑器;
}
void SpinBoxDelegate::setEditorData(QWidget*编辑器,
常数QModelIndex和索引)常数
{
int value=index.model()->data(index,Qt::EditRole.toInt();
QSpinBox*spinBox=静态_转换(编辑器);
spinBox->setValue(值);
}
void SpinBoxDelegate::setModelData(QWidget*编辑器,QBStractItemModel*模型,
常数QModelIndex和索引)常数
{
QSpinBox*spinBox=静态_转换(编辑器);
自旋框->解释文本();
int value=spinBox->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;
    }
}
for(int col=1;colcolumnCount();col++){
QVariant::Type colType=mModel->data(mModel->index(0,col),Qt::DisplayRole).Type();
开关(colType){
案例QVariant::Int:
ui->tableView->setItemDelegateForColumn(col,sbDelegate);
打破
大小写QVariant::字符串:
打破
案例QVariant::Double:
打破
默认:中断;
}
}

您的代理似乎没有任何问题。请将我发布的解决方案与您自己的代码仔细比较。对于未来,创建可复制的最小示例将是有帮助的

main.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();
}
#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);
}
#包括
#包括
#包括
#包括“SpinboxDelegate.h”
int main(int argc,char**args){
QApplication应用程序(argc、args);
自动表格视图=新的QTableView;
自动模型=新的QS标准模型;
模型->设置行数(2);
模型->设置列数(2);
tableView->setModel(模型);
tableView->setItemDelegate(新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;
};
#包括
类SpinBoxDelegate:公共QStyledItemDelegate
{
QWidget*createEditor(QWidget*父对象,常量QStyleOptionViewItem&,常量QModelIndex&)常量;
void setEditorData(QWidget*编辑器,常量QModelIndex和index)常量;
void setModelData(QWidget*编辑器、QBStractItemModel*模型、常量QModelIndex和索引)常量;
};
SpinboxDelegate.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();
}
#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);
}
#包括“SpinboxDelegate.h”
#包括
QWidget*SpinBoxDelegate::createEditor(QWidget*parent,
常量QStyleOptionViewItem&/*选项
*/,
常数QModelIndex&/*索引*/)常数
{
QSpinBox*编辑器=新QSpinBox(父项);
编辑器->设置框架(错误);
/*编辑器->设置最小值(0);
编辑器->设置最大值(100)*/
返回编辑器;
}
void SpinBoxDelegate::setEditorData(QWidget*编辑器,
常数QModelIndex和索引)常数
{
int value=index.model()->data(index,Qt::EditRole.toInt();
QSpinBox*spinBox=静态_转换(编辑器);
spinBox->setValue(值);
}
void SpinBoxDelegate::setModelData(QWidget*编辑器,QBStractItemModel*模型,
常数QModelIndex和索引)常数
{
QSpinBox*spinBox=静态_转换(编辑器);
自旋框->解释文本();
int value=spinBox->value();
模型->设置数据(索引、值、Qt::EditRole);
}

您的代理似乎没有任何问题。请将我发布的解决方案与您自己的代码仔细比较。对于未来,创建可复制的最小示例将是有帮助的

main.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();
}
#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);
}
#包括
#包括
#包括
#包括“SpinboxDelegate.h”
int main(int argc,char**args){
QApplication应用程序(argc、args);
自动表格视图=新的QTableView;
自动模型=新的QS标准模型;
模型->设置行数(2);
模型->设置列数(2);
tableView->setModel(模型);
tableView->setItemDelegate(新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;
};
#包括
类SpinBoxDelegate:公共QStyledItemDelegate
{
QWidget*createEditor(QWidget*父对象,常量QStyleOptionViewItem&,常量QModelIndex&)常量;
void setEditorData(QWidget*编辑器,常量QModelIndex和index)常量;
void setModelData(QWidget*编辑器、QBStractItemModel*模型、常量QModelIndex和索引)常量;
};
SpinboxDelegate.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();
}
#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);
}
#包括“SpinboxDelegate.h”
#包括
QWidget*SpinBoxDelegate::createEditor(QWidget*parent,
常量QStyleOptionViewItem&/*选项
*/,
常数QModelIndex&/*索引*/)常数
{
QSpinBox*编辑器=新QSpinBox(父项);
编辑器->设置框架(错误);
/*编辑器->设置最小值(0);
编辑器->设置最大值(100)*/
返回编辑器;
}
void SpinBoxDelegate::setEditorData(QWidget*编辑器,
常数QModelIndex和索引)常数
{
int value=index.model()->data(index,Qt::EditRole.toInt();
QSpinBox*spinBox=静态_转换(编辑器);
spinBox->setValue(值);
}
void SpinBoxDelegate::setModelData(QWidget*编辑器,QBStractItemModel*模型,
常数QModelIndex和索引)常数
{
QSpinBox*spinBox=静态_转换(编辑器);
自旋框->解释文本();
int value=spinBox->value();
模型->设置数据(索引、值、Qt::EditRole);
}

谢谢您的示例。我从数据库中获取表的数据