2011-11-30 83 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

相關問題