Russian Qt Forum
Май 03, 2024, 10:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как проще всего изментить цвет/шрифт текста в QTable?  (Прочитано 5390 раз)
igorko
Гость
« : Март 23, 2005, 15:58 »

Нужно выделять строки в таблице жирным шлифтом и/или другим цветом текста.

Как это сделать по-проще?

Спасибо!
Записан
Sergeich
Гость
« Ответ #1 : Март 24, 2005, 15:17 »

Надо переопределить метод рисовки для ячеек QTable::paintCell(...)
Например, для рисовки помеченных строк жирным шрифтом можно написать так:
Код:

#include <qapplication.h>
#include <qtable.h>
#include <qvaluevector.h>
#include <qpainter.h>

class MyTable : public QTable
{
public:
MyTable(int numRows, int numCols, QWidget * parent = 0, const char * name = 0)
: QTable( numRows, numCols, parent, name ) { selRows.resize(numRows); }
void setRowSelected( int row, bool s ) { selRows[row] = s; update(); }
private:
void paintCell ( QPainter * p, int row, int col, const QRect & cr, bool selected, const QColorGroup & cg )
{
if ( selRows[row] ) {
QFont font = this->font();
font.setWeight( QFont::Bold );
p->setFont( font );
}
else {
p->setFont( this->font() );
}
QTable::paintCell( p, row, col, cr, selected, cg );
}
QValueVector<bool> selRows;
};

int main( int argc, char** argv )
{
QApplication app( argc, argv );
MyTable mt( 10, 10 );
int i, j;
for ( i = 0; i < mt.numRows(); i++)
for ( j = 0; j < mt.numCols(); j++)
mt.setText( i, j, QString("Row : %1, Col : %2").arg(i+1).arg(j+1) );
mt.setRowSelected( 3, true );
mt.setRowSelected( 7, true );

mt.show();
QObject::connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
return app.exec();
}

Записан
igorko
Гость
« Ответ #2 : Март 24, 2005, 22:40 »

Да Sergeich,

Это ПРОФЕССИОНАЛЬНО!
И именно то что я хотел Улыбающийся

ОГРОМНОЕ СПАСИБО за совет, код и потраченное время

P.S.
Имеет ли смысл заменить QValueVector на QIntDict для экономии ресурсов если таблица большая?

P.S.S. А для чего же тогда переопределять QTableItem::paint если всё (всё ли?) можно делать и с QTable::paintCell?
Записан
Sergeich
Гость
« Ответ #3 : Март 25, 2005, 14:39 »

Цитировать

Имеет ли смысл заменить QValueVector на QIntDict для экономии ресурсов если таблица большая?

Конечно имеет, только вместо QIntDict лучше пользовать QMap, т.к. в 4-ой кутешке контейнеров, основанных на указателях вообще не будет. Если пользовать QMap(QIntDict) исчезает необходимость резайза при добавлении/удалении строк.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 20.