2011-11-30 5 views
1

QStandardItem 을 부호없는 int에서 int로 변경 한 후 QStandardItemModel을 사용하여 QTableview를 만듭니다. 이 동작은 unsigned int에 발생하며 사용자가 편집하는 동안 다른 데이터 유형은 유지됩니다.QStandardItem은 편집 후 부호없는 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); 

지금 편집 후 intuint QVariant의 변환에 관한. 이것은 자연 다음과 같이 설명 할 수있다 : 당신이 편집 한 후 uint

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

있는 QVariant

첫째, 모델은 입력 된 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

관련 문제