Russian Qt Forum
Августа 26, 2025, 22:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt-4.2.0 Linux]QStyleOptionViewItem неправильно возвращает rect.width() и heght  (Прочитано 2778 раз)
izoomer
Гость
« : Января 30, 2008, 19:44 »

Создаю 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 ... что не так ?
« Последнее редактирование: Февраля 01, 2008, 11:40 от izoomer » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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