2016-06-22 11 views
0

Я учусь QT и должны разработать таблицу, как этотверхний индекс для QTableWidget заголовка

example

мне нужно «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» в качестве верхнего индекса, но он не работает, цвет фона также не меняется. Пожалуйста, помогите мне, большое спасибо!

ответ

0

Попробуйте QString("Area \n [m%1]").arg(QChar(0x00B2)) или QString("Area \n [%1]").arg(QChar(0x33A1)). Он должен работать с любой кодировкой источника.

Если это не сработает, возможно, ваш шрифт не поддерживает отображение этих символов. Если нет другого способа, вы можете попытаться подражать заголовкам QLabel с помощью HTML следующим образом: "<B> Area <BR> [m<SUP>2</SUP>] </B>". Помните, что настройка QWidgets на QTableWidget обычно уродлива и, возможно, медленная. И у вас будет плохая архитектура.

+0

спасибо, ваше решение здорово :). Я также нашел другое решение для этого ниже. Кстати, есть ли у вас какие-либо идеи для моей проблемы с цветом фона? Я не знаю, почему моя команда не работает. – htmlamateur

+0

Решение с QChar, конечно? Не знаю о цветах заголовков. Попробуйте Google. По крайней мере, Qt [имел некоторые проблемы] (https://forum.qt.io/topic/40002/qtablewidget-s-header-background-color-doesn-t-work-in-win7) с ним. – ilotXXI

+0

Столкнувшись с таблицей просмотров сегодня, посмотрел на фоне. QHeaderView неправильно обрабатывает исходный стиль по умолчанию в Windows 10. Если стиль приложения изменен на Fusion или другие, он работает. И есть смешное обходное решение: он обрабатывает QSS. Итак, решение 1: 'table-> setStyle (QStyleFactory :: create (" Fusion "))'; решение 2: [применить QSS] (http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qheaderview) к представлению заголовка таблицы. – ilotXXI

0

Try:

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

спасибо за подсказку. Но он все равно не работает :( – htmlamateur

0

после поиска я нашел решение для этого, я не достаточно хорошо, чтобы знать, почему это работает, но это работает для меня

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 + "]");