c++ - QTreeWidgetItem 可编辑只允许输入数字

标签 c++ qt

我创建了一个带有多个 QTreeWidgetItemQTreeWidget

这是我的代码:

//Defined property tree
m_pPropertyTree = new QTreeWidget();
m_pPropertyTree->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_pPropertyTree->setColumnCount(2);
m_pPropertyTree->setHeaderLabels(QStringList() << "Property" << "Value");
//Update to property tree
//--geometry
QTreeWidgetItem *pGeometryItem = new QTreeWidgetItem(m_pPropertyTree);
pGeometryItem->setText(0, "geometry");
//X
QTreeWidgetItem *pXItem = new QTreeWidgetItem();
pXItem->setText(0, "X");
pXItem->setText(1, QString::number(geometry().x()));
pXItem->setFlags(pXItem->flags() | Qt::ItemIsEditable);
pGeometryItem->addChild(pXItem);
//Y
QTreeWidgetItem *pYItem = new QTreeWidgetItem();
pYItem->setText(0, "Y");
pYItem->setText(1, QString::number(geometry().y()));
pYItem->setFlags(pYItem->flags() | Qt::ItemIsEditable);
pGeometryItem->addChild(pYItem);
//Width
QTreeWidgetItem *pWidthItem = new QTreeWidgetItem();
pWidthItem->setText(0, "Width");
pWidthItem->setText(1, QString::number(geometry().width()));
pWidthItem->setFlags(pWidthItem->flags() | Qt::ItemIsEditable);
pGeometryItem->addChild(pWidthItem);
//Height
QTreeWidgetItem *pHeightItem = new QTreeWidgetItem();
pHeightItem->setText(0, "Height");
pHeightItem->setText(1, QString::number(geometry().height()));
pHeightItem->setFlags(pHeightItem->flags() | Qt::ItemIsEditable);
pGeometryItem->addChild(pHeightItem);

当双击一个项目时,我可以编辑该项目的文本。但是,我只想允许用户在编辑时输入数字。有没有办法做到这一点?

最佳答案

我认为有很多方法,但是 QItemDelegate::createEditor 的重载比其他的更有用。

您应该使用 QValidator 编写代码,在您的情况下,请使用 QIntValidator

class CustomDelegate : public QItemDelegate
{
public:
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem & option,
                      const QModelIndex & index) const
    {
        QLineEdit *lineEdit = new QLineEdit(parent);

        // Set your validator, such as 'only number between 0 ~ 9 )
        QIntValidator *validator = new QIntValidator(0, 9, lineEdit);
        lineEdit->setValidator(validator);

        return lineEdit;
    }
};

然后,将您的自定义委托(delegate)设置为您的树。

m_pPropertyTree->setItemDelegate( new CustomDelegate );

关于c++ - QTreeWidgetItem 可编辑只允许输入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35835419/

相关文章:

c++ - 当鼠标离开 QListView 时,ListViewItem 停留在鼠标悬停状态

qt - 在带有 QSqlQueryModel 的 QListView 上使用 QStyledItemDelegate

c++ - 如何在 boost.python 中转换 std::string* ?

c++ - 无符号长按位运算符?

c++ - C++ 内联函数的定义必须在同一个文件中吗?

c++ - Qt QWebsocket::open block 用户界面

c++ - 我如何只使一个 QComboBox 项目可编辑?

c++ - Visual Studio 不能包含头文件。

c++ - xlib XNextEvent 检查一个键是否被按下

c++ - 为什么 QPixmap::scaled() 不起作用?