2013-06-24 58 views
0

我正在Qtableview裏面工作Qstandarditemmodel。我在Qdeligates派生的類中使用了Qtextedit。這允許我在tableview中插入換行符。Qtableview&Qdeligate - qtextedit在左上角開幕

大部分事情都很好,但現在我面臨着一個挑戰,即當我點擊一個單元格來編輯Qtextedit在GUI的左上角時打開。當我點擊單元格row 0, column 3 textedit在左上角打開。

我怎樣才能讓我的Qtextedit到小區附近開對此我編輯?
還什麼我應該把這個功能updateEditorGeometry裏面?

這裏是我的初始化代碼,實現代碼如下: -

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()); 
相關問題