2013-06-24 3 views
0

Я работаю над Qtableview внутри Qstandarditemmodel. Я использую Qtextedit внутри класса, полученного от Qdeligates. Это позволяет мне вставлять новую строку внутри таблицы.Qtableview & Qdeligate - открытие qtextedit в левом углу

Большинство вещей работают нормально, но теперь я столкнулся с проблемой, когда когда-либо я нажимаю ячейку для редактирования Qtextedit, открывается в левом углу графического интерфейса. Когда я нажимаю на ячейку row 0, column 3, текстовый файл открывается в левом углу.

Как я могу сделать мой Qtextedit открыть около клетки, которые я издаю ?
Кроме того, что я должен положить внутри этой функции updateEditorGeometry?

Вот мой код инициализации для Tableview: -

ui->testCaseTableView->verticalHeader()->resizeSections(QHeaderView::ResizeToContents); //---> original 
ui->testCaseTableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); 
ui->testCaseTableView->horizontalHeader()->setStretchLastSection(true); 

//Set model & deligate 
ui->testCaseTableView->setModel(model); 
ui->testCaseTableView->setItemDelegate(mydeligate); 

Вот мой код deligate: ---

QWidget* textViewDeligate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 

    QTextEdit *tableEdit = new QTextEdit(parent); 
    return tableEdit; 
} 

void textViewDeligate::setEditorData (QWidget * editor, const QModelIndex & index) const 
{ 

    QString value = index.model()->data(index,Qt::EditRole).toString(); 

    QTextEdit *tableEditCopy = static_cast<QTextEdit*>(editor); 
    tableEditCopy->setPlainText(value); 
} 

void textViewDeligate::setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const 
{ 
    QTextEdit *tableEditCopy = static_cast<QTextEdit*>(editor); 
    QString str = tableEditCopy->toPlainText(); 

    model->setData(index, str, Qt::EditRole); 

} 

void textViewDeligate::updateEditorGeometry (QWidget *editor, const QStyleOptionViewItem & option, const QModelIndex & index) const 
{ 

} 

enter image description here

ответ

0

Вам нужно для настройки редактора геометрию всех виджетов, которые вы создаете сами. Это значит, что виджеты получают правильные размеры ячеек таблиц.

void textViewDeligate::updateEditorGeometry (QWidget *editor, const QStyleOptionViewItem & option, const QModelIndex & index) const 
{ 
    editor->setGeometry(option.rect); 
} 
0

Это было то, что улучшилась его дальше: ---

editor->setGeometry(option.rect.x(),option.rect.y(),editor->sizeHint().width(),editor->sizeHint().height());