QTableWidget 的上标 header

superscript for QTableWidget header

我正在学习 QT,必须设计一个像这样的 table

我需要 "m2",上标为“2”。

这是我的代码:

ui.tableWidget->horizontalHeaderItem(0)->setText("Date");
ui.tableWidget->horizontalHeaderItem(0)->setBackgroundColor(QColor(217, 217, 217));
ui.tableWidget->horizontalHeaderItem(1)->setText("House address");
ui.tableWidget->horizontalHeaderItem(1)->setBackgroundColor(QColor(217, 217, 217));
ui.tableWidget->horizontalHeaderItem(2)->setText("Area \n [m\u00B2]");
ui.tableWidget->horizontalHeaderItem(2)->setBackgroundColor(QColor(217, 217, 217));
ui.tableWidget->horizontalHeaderItem(3)->setText("Price \n [USD]");
ui.tableWidget->horizontalHeaderItem(3)->setBackgroundColor(QColor(217, 217, 217));
ui.tableWidget->horizontalHeaderItem(4)->setText("Price/Area \n [USD/m\u00B2]");
ui.tableWidget->horizontalHeaderItem(4)->setBackgroundColor(QColor(217, 217, 217));

我用“\u00B2”代替“2”作为上标,但它不起作用,背景颜色也没有改变。请帮助我,非常感谢!

尝试:

ui.tableWidget->horizontalHeaderItem(2)->setText(QString::fromUtf8("Area \n [m\u00B2]"));

试试 QString("Area \n [m%1]").arg(QChar(0x00B2))QString("Area \n [%1]").arg(QChar(0x33A1))。它应该适用于任何源编码。

如果还是不行,可能是你的字体不支持这个符号显示。如果没有其他办法,你可以尝试用 QLabel 和 HTML 模仿 headers,像这样:"<B> Area <BR> [m<SUP>2</SUP>] </B>"。请记住,将 QWidgets 设置为 QTableWidget 通常很丑陋并且可能很慢。而且你的架构会很糟糕。

经过搜索,我找到了解决方案,我不太清楚它为什么有效,但对我来说效果很好

const char s[] = {
    0x6D,               // m
    0xC2, 0xB2,         // superscript two
    0x00                // NUL terminator
};
QString str = QString::fromUtf8(s);

然后

ui.tableWidget->horizontalHeaderItem(2)->setText("Area \n [m" + str + "]");