2011-11-30 43 views
1

在编辑QStandardItem 将类型从unsigned int更改为int后,我创建了一个带有QStandardItemModel的QTableview。 这种行为恰好发生在unsigned int中,只是在用户正在编辑它时,其他数据类型仍然存在。QStandardItem在编辑后将unsigned int转换为int

window.cpp

#include "window.h" 
#include "ui_window.h" 
#include <QTableView> 
#include <QStandardItem> 
#include <QDebug> 

Window::Window(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::Window) 
{ 
    ui->setupUi(this); 

    QTableView *tblview = new QTableView(this); 
    model = new QStandardItemModel(0,0); 

    tblview->setModel(model); 

    QStandardItem *data=new QStandardItem; 
    data->setEditable(true); 
    data->setData(QVariant((uint)1), Qt::DisplayRole); 
    model->setItem(0, 0, data); 
    tblview->show(); 

    QModelIndex index = model->index(0, 0, QModelIndex()); 

    tblview->setGeometry(0,0,200,200); 

    //result QVariant(uint, 1) 
    qDebug() << model->data(index); 



    connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(dataChanged(QStandardItem*))); 
} 

Window::~Window() 
{ 
    delete ui; 
} 

void Window::dataChanged(QStandardItem* stditem) 
{ 
    //result 
    //QVariant(int, 3) 
    //expected result 
    //QVariant(uint, 3) 
    qDebug() << model->data(stditem->index()); 

} 

在window.h

#ifndef WINDOW_H 
#define WINDOW_H 

#include <QMainWindow> 
#include <QStandardItem> 

namespace Ui { 
    class Window; 
} 

class Window : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit Window(QWidget *parent = 0); 
    ~Window(); 

private: 
    Ui::Window *ui; 
    QStandardItemModel* model; 

private slots: 
    void dataChanged(QStandardItem*); 
}; 

#endif // WINDOW_H 

回答

2

第二qDebug()不打印什么,因为你没有定义的角色。这将工作:

qDebug() << stditem->data(Qt::DisplayRole); 

现在就从uintQVariantint编辑后的转换。这是自然的,可以作如下解释:

首先,你有一个QVariantuint

QVariant v = QVariant((uint) 5)); // It is uint now... 

编辑后,模型改变其与被输入的int值值

v = QVariant(10); // Now v is not uint anymore but int 

为了避免它,你应该子类QStandardItemModel,并重新实现setData函数。在那里您应该明确地将新值赋给uint

+0

现在的问题是,这是一个错误,因为转换只发生在uint .. – nfo

+0

它可能是一个错误。我做了一些测试,我发现float会变成QString。也许你应该写一个错误报告。 https://bugreports.qt.nokia.com/secure/Dashboard.jspa – pnezis

相关问题