LINUX.ORG.RU

Qt: QTableWidget


0

0

Подскажите, как установить стиль для определённой ячейки таблицы?

Выравнивание (Alignment) устанавливается только для отдельно взятой ячейки, для столбца сразу нельзя его установить?

★★★

Стиль вроде нельзя... но ведь у неё есть и setFont() и setBackground() etc. Так не устроит?

Получается, что нет. Разве что пройтись циклом по всему столбцу.
А чем обусловлено использование QTableWidget, а не QTableView?

UVV ★★★★★
()

Создаёшь свои делегаты, со своими свойствами, а затем назначаешь их ячейке - setItemDelegate() или столбцу - setItemDelegateForColumn()

Например, делегат с выравниванием:

#include <QtGui>

class Delegate: public QStyledItemDelegate {
	int aFlags;
public:
	Delegate( int flags ) :
		aFlags( Qt::AlignVCenter | flags ) {
	}

	void paint( QPainter* p, const QStyleOptionViewItem& o, const QModelIndex& i ) const {
		Q_ASSERT( i.isValid() );

		QStyleOptionViewItemV4 opt = o;
		initStyleOption( &opt, i );
		opt.displayAlignment = (Qt::Alignment) aFlags;

		QStyle *style = QApplication::style();
		style->drawControl( QStyle::CE_ItemViewItem, &opt, p, NULL );
	}
};

int main( int argc, char *argv[] ) {
	QApplication a(argc, argv);

	QTableWidget w;
	w.setColumnCount( 3 );
	w.setRowCount( 3 );

	for( int i = 0; i < 3; ++i ) {
		for( int j = 0; j < 3; ++j ) {
			w.setItem( i, j, new QTableWidgetItem( "123" ) );
		}
	}

	w.setItemDelegateForColumn( 1, new Delegate( Qt::AlignCenter ) );
	w.show();

	return a.exec();
}

summatus
()
Ответ на: комментарий от summatus

Используя setItemDelegate() для установки стиля отдельной ячейки, определять его надо в Delegate::paint(), в соответствии QModelIndex

summatus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.