我在 QTreeWidget 中有一个 QSpinbox,其方法类似于此处描述的组合框方法https://stackoverflow.com/a/4849010/10220019。
我在这里读过https://forum.qt.io/topic/103667/qdoublespinbox-why-isn-t-valuechanged-signal-fired-when-content-is-empty/5如果你使用valueChanged(const QString&)
信号,这应该当您从数字退格为空时触发。然而,这对我来说不是这样。我可以看到该帖子和我的代码之间的唯一区别是我使用的是 QSpinBox 而不是 QDoubleSpinBox 但我猜这不应该是问题。
我想我可能错误地连接了信号,因为我得到的行为完全符合我对 valueChanged(int) 的期望。但是那时我不知道如何编写连接。有人看到错误吗?
我的代码是:QTreeWidgetItemSpinBox.h
#pragma once
#pragma warning (push)
#pragma warning (disable: 26451 26495 26498 26439)
#include <QtWidgets/QSpinbox>
#include <QtWidgets/QTreeWidget>
#include <QtWidgets/QToolTip>
#pragma warning (pop)
class QTreeWidgetItemSpinBox :
public QSpinBox
{
Q_OBJECT
public:
QTreeWidgetItemSpinBox(QTreeWidgetItem* treeItem, int column);
public slots:
void validateValue(const QString& input);
private:
QTreeWidgetItem* treeItem;
int column;
};
QTreeWidgetItemSpinBox.cpp
#include "QTreeWidgetItemSpinBox.h"
#include <QtCore/QDebug>
QTreeWidgetItemSpinBox::QTreeWidgetItemSpinBox(QTreeWidgetItem* treeItem, int column)
: treeItem(treeItem), column(column)
{
connect(this, SIGNAL(valueChanged(const QString&)), SLOT(validateValue(const QString&)));
}
void QTreeWidgetItemSpinBox::validateValue(const QString& input)
{
qDebug() << "Called"; //Is called when changed to another number but not if the change is to empty or if I add zeros before a number
}