2016-03-09 2 views
2

У меня есть QTableWidget с 3 колонками. 2 столбца имеют в них некоторый текст, но один из них пуст, и я хочу, чтобы он имел фоновый цвет. Также я хочу, чтобы ячейки имели границы.Как установить границу ячейки и цвет фона в QTableWidgetItem?

Если я

int i = 0; 
foreach (tableData el, data) { 
    //setting the first cell 

    ui->eventTable->setItem(i, 1, new QTableWidgetItem); 
    //ui->eventTable->item(i, 1)->setBackground(el.severityColor); 
    //ui->eventTable->item(i, 1)->setBackgroundColor(el.severityColor); 
    ui->eventTable->item(i, 1)->setData(
     Qt::BackgroundRole, 
     QBrush(el.severityColor) 
    ); 

    //setting the third cell 

    ++i; 

} 

все работает, как ожидалось.

Но если до этого кода я пытаюсь добавить границу с

QString style(
    "QTableWidget::item {" 
     "border: 1px solid white;" 
    "}" 
); 
ui->eventTable->setStyleSheet(style); 

фон не установлен.

Я пробовал с setBackground(), setBackgroundColor() (хотя он устарел) и setData(), как видно из кода, но результат тот же.

Также я попробовал setShowGrid(true), приведенный выше в таблице стилей, но граница не показывалась.

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

Я что-то упустил? Что еще я должен попробовать? В качестве альтернативы можно ли настроить таргетинг на определенные строки/ячейки в стилях, чтобы я мог построить строку стилей, которая делает то, что я хочу?

Edit: я могу иметь еще стили в QTableWidget::item и они применяются, проблема в том, когда у меня есть границы. Я также попытался написать стиль границы, как:

border-width: 1px; 
border-style: solid; 
border-color: white; 

, но до сих пор не повезло. Также, если я устанавливаю фон из стилей, он работает. Это не работает, если я устанавливаю его в коде.

ответ

2

Вот свойства, нужно, чтобы получить ваш стол в стиле надлежащим образом. Обратите внимание, что gridline-color является свойством, которое определяет границы элементов, которое определено в QTableView и неQTableView::item.

QTableView 
{ 
    color: {color}; 
    border: 1px solid {color}; 
    background: {color}; 
    gridline-color: {color}; 
} 
QTableView::item 
{ 
    background: {color}; 
} 

Очевидно, что вы бы заменить {color} с соответствующими цветами для каждого свойства.

+0

Это работает, но достаточно только «gridline-color». Как я вижу, стили, установленные с 'setStylesheet()' имеют более высокий приоритет, чем те, что установлены с 'setBackground()' и т. Д., Можете ли вы предоставить любую документацию, где я могу это прочитать? Спасибо. –

+0

Я просто хотел, чтобы все свойства были тщательными. У меня есть закладки [Style Sheet Documentaiton] (http://doc.qt.io/qt-4.8/stylesheet-reference.html) в моих закладках. – MildWolfie

0

Я думаю, что вам нужно, чтобы стиль фона и границы, свойства

QTableView { 
    background-color : none; 
} 

QTableView::item { 
    border: 1px solid white; 
    background-color : none; 
} 
+0

Спасибо за ответ, но это не устраняет проблему. Я думаю, что 'QTableWidget :: item' действителен, так как он стилирует ячейку и добавляет границу. Также стиль, предоставленный вами, делает то же самое, добавляет границу, но при использовании цвет фона не работает. –

+0

Как установить цвет фона как для QTableWidget, так и для элементов? Btw Я обновлю или удалю свой ответ, если он не работает – floppy12

+0

Цвет фона ячейки, похоже, работает с указанным выше стилем, но теперь граница больше не отображается.И что-то странное происходит, если я добавляю ';' affter the first '}', тогда цвет работает и граница не установлена, если я удаляю ';', тогда цвет не работает и граница установлена. Я предполагаю, что ';' отключает стиль 'QTableView :: item', поэтому он работает. –

Смежные вопросы