【问题标题】:Is there a way to display integer data inside a QTableWidget as hexadecimal?有没有办法将 QTableWidget 内的整数数据显示为十六进制?
【发布时间】:2021-06-13 11:49:03
【问题描述】:

我有一个继承自 QTableWidget 的类,名为 InsnTable,其中一列包含整数数据...我想将整数显示为 32 位十六进制值。有没有简单的方法可以做到这一点? 我想将数据存储为QStrings 而不是int 并相应地将整数转换为十六进制......在我的情况下,问题在于我必须不断搜索该列中的值,所以我会必须将每个数据项转换回整数才能成功搜索... 那么有没有办法只将此列“查看”为十六进制值,但将它们定期存储为整数?

我插入整数数据如下:

void InsnTable::insertInsn(const InsnEntry &insn)
{
    this->insertRow(this->rowCount());

    QTableWidgetItem *addrValue = new QTableWidgetItem();
    uint64_t addr = insn.addr();

    addrValue->setData(Qt::EditRole, QVariant::fromValue(addr));
    this->setItem(this->rowCount() - 1, 0, addrValue);
}

【问题讨论】:

  • 要么为 Qt::DislayRole 设置一个 QString,要么从 QTableWidgetItem 派生并返回所需的数据值(Qt::DislayRole),或者使用自定义项委托。

标签: c++ qt qtablewidget qtablewidgetitem


【解决方案1】:

确定:

你可以在你做的部分:

QVariant::fromValue(addr)

给出一个十六进制格式的字符串,你需要这样的东西来将一个数字转换成一个十六进制 QString

uint decimal = 255;
QString hexadecimal{};
hexadecimal.setNum(decimal,16);

最后代码如下:

void InsnTable::insertInsn(const InsnEntry &insn)
{
    this->insertRow(this->rowCount());

    QTableWidgetItem *addrValue = new QTableWidgetItem();
    uint64_t addr = insn.addr();
    QString hexadecimal{};
    hexadecimal.setNum(decimal,16);

    addrValue->setData(Qt::EditRole, QVariant::fromValue(hexadecimal));
    this->setItem(this->rowCount() - 1, 0, addrValue);
}

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2013-02-26
    • 2010-09-24
    • 2016-11-12
    • 2010-10-16
    相关资源
    最近更新 更多