Я хочу установить шрифт жирным шрифтом в определенной позиции столбца строки моего виджета таблицы. Мне это понравилось, но у меня перерыв.

QFont font("Helvetica", 12, QFont::Bold);
overviewTable->item(2,2)->setFont(font);

Пожалуйста помоги

4
Sijith 20 Май 2010 в 13:29
Что такое обзорная таблица? Это QTableWidget или QTableView?
 – 
mosg
20 Май 2010 в 13:36

2 ответа

Лучший ответ

Думаю, все ок. Вот что говорят документы:

void QTableWidgetItem::setFont ( const QFont & font )

Устанавливает шрифт, используемый для отображения текста элемента, для данного шрифта.

Может быть, ваша overviewTable const?

ДОБАВЛЕНО:

Этот вариант отлично подходит для моего Qt 4.6:

tableWidget = new QTableWidget(12, 3, this);

for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 3; j++) {
        QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
            (i+1)*(j+1)));
        tableWidget->setItem(i, j, newItem);
    }
}

QFont font;
font.setBold(true);

tableWidget->item(2, 2)->setFont(font);
7
mosg 20 Май 2010 в 14:24

Может быть, у вас сбой, потому что вы не позвонили setItem(), чтобы установить элемент для ячейки (2, 2), прежде чем использовать overviewTable->item(2,2). Как говорится в документе Qt,

QTableWidgetItem * QTableWidget :: item (int row, int column) const

Возвращает элемент для данной строки и столбца, если он был установлен; в противном случае возвращает 0.

То есть ваш overviewTable->item(2,2), вероятно, возвращает 0, что вызывает Segmentation fault в вызове setFont().

Итак, ваши средства для установки шрифта совершенно правильны. Вам просто нужно сначала вызвать setItem (), как предлагает ответ mosg.

ДОБАВЛЕНО:

Если ваш overviewTable - это QTableWidget, созданный в Qt Designer, то в конструкторе двойной щелчок по ячейке (просто для входа в режим редактирования, фактически ничего вводить не нужно) будет иметь эффект вызов setItem() для этой ячейки. Позже в коде вы можете напрямую использовать функцию item() без предварительного вызова setItem().

0
hello_mike_ 30 Июл 2016 в 15:24