QStandardItem конвертирует unsigned int в int после редактирования - PullRequest
1 голос
/ 30 ноября 2011

Я создаю QTableview с QStandardItemModel, после редактирования QStandardItem тип изменился с неподписанного int на int. Такое поведение происходит с unsigned 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

1 Ответ

2 голосов
/ 30 ноября 2011

Второй qDebug() не печатает ничего, потому что вы не определяете роль.Это будет работать:

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

Теперь относительно преобразования из uint QVariant в int после редактирования.Это естественно и может быть объяснено следующим образом:

Сначала у вас есть QVariant, то есть uint

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

После редактирования модель меняет свое значение на значение intвведено

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

Чтобы избежать этого, вы должны создать подкласс QStandardItemModel и переопределить функцию setData.Там вы должны явно привести новое значение к uint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...