QstandardItem在编辑后将未签名的INT转换为INT
-
26-10-2019 - |
题
我创建了一个带有QStandardItemModel的QTableView,在编辑QstandardItem之后,类型从Unsigned INT变为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());
}
窗口
#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
解决方案
第二 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
.
不隶属于 StackOverflow