Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QStandardItem在编辑后将无符号int转换为int_Qt_Qtableview_Qstandarditemmodel - Fatal编程技术网

Qt QStandardItem在编辑后将无符号int转换为int

Qt QStandardItem在编辑后将无符号int转换为int,qt,qtableview,qstandarditemmodel,Qt,Qtableview,Qstandarditemmodel,编辑QStandardItem后,我使用QStandardItemModel创建了一个QTableview 类型从无符号int更改为int。 这种行为只发生在unsigned int上,当用户编辑它时,其他数据类型仍然存在 window.cpp #include "window.h" #include "ui_window.h" #include <QTableView> #include <QStandardItem> #include <QDebug>

编辑QStandardItem后,我使用QStandardItemModel创建了一个QTableview 类型从无符号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”
#包括“ui_window.h”
#包括
#包括
#包括
窗口::窗口(QWidget*父窗口):
QMainWindow(父级),
ui(新ui::窗口)
{
用户界面->设置用户界面(此);
QTableView*tblview=新的QTableView(此);
模型=新的QS标准模型(0,0);
tblview->setModel(模型);
QStandardItem*数据=新QStandardItem;
数据->设置可编辑(真);
数据->设置数据(QVariant((uint)1),Qt::DisplayRole);
模型->设置项(0,0,数据);
tblview->show();
QModelIndex index=model->index(0,0,QModelIndex());
tblview->setGeometry(0,0200200);
//结果变量(uint,1)
qDebug()数据(索引);
连接(型号、信号(项更改(QStandardItem*))、此、插槽(数据更改(QStandardItem*));
}
窗口::~Window()
{
删除用户界面;
}
无效窗口::数据已更改(QStandardItem*stditem)
{
//结果
//QVariant(int,3)
//预期结果
//QVariant(uint,3)
qDebug()数据(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
\ifndef窗口
#定义窗口
#包括
#包括
名称空间用户界面{
类窗口;
}
类窗口:公共QMainWindow
{
Q_对象
公众:
显式窗口(QWidget*parent=0);
~Window();
私人:
Ui::Window*Ui;
QStandardItemModel*模型;
专用插槽:
无效数据更改(QStandardItem*);
};
#endif//WINDOW\u H
第二个
qDebug()
没有打印任何内容,因为您没有定义角色。这将有助于:

qDebug() << stditem->data(Qt::DisplayRole);
编辑后,模型将使用输入的int值更改其值

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

为了避免这种情况,您应该将
QStandardItemModel
子类化,并重新实现
setData
函数。在那里,您应该显式地将新值强制转换为
uint

,这可能是一个bug。我做了一些测试,发现float变成了QString。也许你应该写一份bug报告。
v = QVariant(10); // Now v is not uint anymore but int