2013-02-14 1 views
1

У меня есть проблема с моим QListView, его малюет непредусмотренный пункт на левом верхнем углу QListView:QListView и дисплей делегата непреднамеренного пункт

http://s4.postimage.org/64orbk5kd/Screen_Shot_2013_02_14_at_20_23_14.png

я использую QStyledItemDelegate в моем QListView:

m_stringList.push_back("FIRST"); 
m_stringList.push_back("SECOND"); 
m_stringList.push_back("THIRD"); 
m_model.setStringList(m_stringList); 

ui->processesListView->setFlow(QListView::LeftToRight); 
ui->processesListView->setModel(&m_model); 
ui->processesListView->setItemDelegate(new ProcessItemDelegate(this, ui->processesListView)); 

делегат (ProcessItemDelegate) метод краски использовать пользовательские QWidget для отображения информации:

void ProcessItemDelegate::paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex &inIndex) const 
{ 
    _listItem->setContent(_listView->model()->data(inIndex).toString()); 
    painter->save(); 
    painter->translate(option.rect.center()); 
    _listItem->render(painter); 
    painter->restore(); 
} 

Метод setContent из QWidget очень просто:

void ProcessItem::setContent(const QString &s) 
{ 
    ui->processId->setText(s); 
} 

ответ

1

У меня есть еще один способ добавить виджет в какой-то список, используя QListWidget.

Например, зная, что ui->historyView является элементом QListWidget и HistoryElementView подкласс QWidget.

void View::onHistoryChanged(const QList<HistoryElement> &history) 
{ 
    clearHistory(); 
    foreach(HistoryElement elt, history) 
    { 
     HistoryElementView *historyViewElement = new HistoryElementView(elt.getDateTime("dd/MM/yyyy - hh:mm"), elt.getFilename()); 
     QListWidgetItem *item = new QListWidgetItem(); 

     ui->historyView->addItem(item); 
     ui->historyView->setItemWidget(item, historyViewElement); 
    } 
} 

void View::clearHistory() 
{ 
    QListWidgetItem *item; 

    while (ui->historyView->count() != 0) 
    { 
     item = ui->historyView->takeItem(0); 

     delete item; 
    } 
} 

Вам не нужно удалять виджеты внутри QListWidgetItem, это будет ручка на Qt.

После того, как виджеты находятся внутри списка, вы можете получить их с помощью:

// Using index 
QListWidgetItem *item = ui->historyView->item(0); 
HistoryElementView *elt = qobject_cast<HistoryElementView *>(ui->historyView->itemWidget(item)); 

// Using position 
QListWidgetItem *item = ui->historyView->itemAt(pos); 
HistoryElementView *historyElement = qobject_cast<HistoryElementView *>(ui->historyView->itemWidget(item)); 

Надеется, что это помогает.

Смежные вопросы