Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: igorko от Март 23, 2005, 15:58



Название: Как проще всего изментить цвет/шрифт текста в QTable?
Отправлено: igorko от Март 23, 2005, 15:58
Нужно выделять строки в таблице жирным шлифтом и/или другим цветом текста.

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

Спасибо!


Название: Как проще всего изментить цвет/шрифт текста в QTable?
Отправлено: Sergeich от Март 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();
}



Название: Как проще всего изментить цвет/шрифт текста в QTable?
Отправлено: igorko от Март 24, 2005, 22:40
Да Sergeich,

Это ПРОФЕССИОНАЛЬНО!
И именно то что я хотел :)

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

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

P.S.S. А для чего же тогда переопределять QTableItem::paint если всё (всё ли?) можно делать и с QTable::paintCell?


Название: Как проще всего изментить цвет/шрифт текста в QTable?
Отправлено: Sergeich от Март 25, 2005, 14:39
Цитировать

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

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