Создаю QListWidget
QListWidget * listButton = new QListWidget(this);
foreach(QString text, buttons ){
QListWidgetItem * _item = new QListWidgetItem(text, listButton);
_item->setSizeHint(QSize(450,heightButton));
}
listButton->setGeometry(175, (300-(heightDialog/2)+20)+heightMessage+20, 450, ( buttons.size() * heightButton ) + 20 );
listButton->setCurrentRow( 0 );
delegate = new _dialogDelegate();
QPalette _palete = listButton->palette();
_palete.setBrush(QPalette::Base, Qt::transparent);
listButton->setPalette( _palete );
listButton->setFrameStyle(QFrame::NoFrame);
listButton->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
listButton->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
listButton->setItemDelegate(delegate);
то есть размер каждой строки задаю через _item->setSizeHint
Однако когда в делегате использую такой код
void _dialogDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QString text = index.model()->data(index, Qt::DisplayRole).toString();
painter->setRenderHint(QPainter::Antialiasing, true);
if (option.state & QStyle::State_Selected) {
painter->setBrush(QBrush(QColor(0, 0, 0, 100), Qt::SolidPattern));
painter->setPen(Qt::NoPen);
painter->drawRoundRect(option.rect.x(),option.rect.y(),option.rect.width(),option.rect.height(),5,5);
}
}
то размеры option.rect.width(),option.rect.height() почемуто возвращаются -1 , в то время как координаты x и y возарщаются правильно ... отчего же так ?
пробовал и sizeHint переопределять в делегате ...
QSize _dialogDelegate::sizeHint(const QStyleOptionViewItem & option ,
const QModelIndex & index ) const
{
return QSize(option.rect.width(),option.rect.height());
}
Все равно -1 ... что не так ?