【发布时间】:2019-09-06 13:25:49
【问题描述】:
我在 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&)signal,当你从一个数字退格到空时,它应该会触发。然而,这对我来说不是这样。我可以看到该帖子和我的代码之间的唯一区别是我使用的是 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
}
【问题讨论】:
-
尝试使用正确信号的 Qt 5 连接语法
connect(this , &QSpinBox::valueChanged , &QTreeWidgetItemSpinBox::validateValue); -
其实应该是
connect(this , QOverload<const QString &>::of(&QSpinBox::valueChanged), &QTreeWidgetItemSpinBox::validateValue);但是连接的方式不会有任何区别。 -
@MaximPaperno “如何建立连接不会有任何区别”那么为什么语法会有所不同?为什么一个比另一个更受欢迎?