【问题标题】:QTableView & QDelegate -- QTextEdit opening on left cornerQTableView & QDelegate -- QTextEdit 在左上角打开
【发布时间】:2020-05-17 23:42:09
【问题描述】:

我正在 QStandardItemModel 内处理 QTableview。我在派生自Qdeligates 的类中使用QTextEdit。这允许我在 tableview 中插入换行符。

大部分工作正常,但现在我面临一个挑战,即当我单击要编辑的单元格时,QTextEdit 会在 GUI 的左角打开。当我单击单元格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
{

}

【问题讨论】:

    标签: qt qtableview


    【解决方案1】:

    您需要设置您自己创建的所有小部件的编辑器几何形状。这是为了让小部件获得表格单元格的正确尺寸。

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

    【讨论】:

      【解决方案2】:

      这是进一步改进它的原因:---

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-27
        • 2020-05-09
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多