Frage

Ich erstelle eine QTableView mit einem QStandardItemmodel, nachdem ich den QStandardItem bearbeitet habe, der vom nicht signierten int zu int int geändert wurde. Dieses Verhalten ist einfach unsigniert und während der Benutzer es bearbeitet, bleiben andere Datentypen.

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());

}

Fenster.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
War es hilfreich?

Lösung

Der Zweite qDebug() druckt nichts, weil Sie die Rolle nicht definieren. Das wird funktionieren:

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

Jetzt über die Umwandlung von einem uint QVariant zu einem int Nach der Bearbeitung. Dies ist natürlich und kann wie folgt erklärt werden:

Zuerst hast du eine QVariant das ist uint

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

Nach der Bearbeitung ändert das Modell seinen Wert mit dem int -Wert, der eingegeben wird

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

Um es zu vermeiden, sollten Sie die Unterklasse QStandardItemModel, und neu einplanen setData Funktion. Dort sollten Sie den neuen Wert ausdrücklich auf uint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top