【发布时间】:2014-05-13 06:58:18
【问题描述】:
我目前正试图让我的 QTableWidget 只显示数字。我读到我需要一个 QAbstractItemDelegate 才能这样做,所以我通读了文档并发现 createEditor 无效。这是我目前正在使用的代码:
#include "tabledelegate.h"
TableDelegate::TableDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}
QWidget* TableDelegate::createEditor(QWidget* parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
{
QLineEdit* editor = new QLineEdit(parent);
QDoubleValidator* val = new QDoubleValidator(editor);
val->setBottom(0);
val->setNotation(QDoubleValidator::StandardNotation);
editor->setValidator(val);
return editor;
}
我正在尝试通过在 MainWindow 的构造函数中执行此操作来调用委托:
ui->tableWidget->setItemDelegate(new TableDelegate(ui->tableWidget));
但它给了我这个错误:
没有匹配函数调用'QTableWidget::setItemDelegate(TableDelegate*)' ui->tableWidget->setItemDelegate(new TableDelegate(ui->tableWidget)); ^
为什么?
【问题讨论】:
-
如果你打电话给
ui->tableWidget->setItemDelegate(new TableDelegate());怎么办?当您将委托设置为该表时,我认为您不需要将表设置为委托的父对象。 -
不,这给了我一个非常相似的错误。
-
@vahancho:设置没有父母不是一个好主意。正如文档所说,QAbstractItemView 不拥有委托的所有权,这意味着如果您不设置父级,则会发生内存泄漏。
标签: c++ qt delegates validation qtablewidget