gpt4 book ai didi

c++ - Qt QSpinbox 在设置范围后接受 '+' 符号

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:20 24 4
gpt4 key购买 nike

我有一个QSpinbox,我正在设置它的范围:

QSpinBox *SpinBox = new QSpinBox;
SpinBox->setRange(0, 100);

但是,我可以手动输入 + 符号,但我的插槽中没有反射(reflect)出来。

connect (SpinBox, SIGNAL (valueChanged (QString)), this,
SLOT (onSpinBoxChanged (QString)));

我也尝试用 int 替换 QString 。但是 + 并没有体现在 slot 中。

如何限制输入 + 符号?

我引用了一些 Qt 和 StackOverflow 的帖子/答案来禁用旋转框中的行编辑:

我试图将旋转框的行编辑ReadOnly设置为ReadOnly,但我无法这样做,因为它是一个const变量。

一些答案​​建议继承 QSpinbox 类。

是否有任何其他方法来限制 + 符号或禁用 QSpinbox 的行编辑本身?

最佳答案

如果你不想继承QSpinBox类,一个可能的解决方案是使用eventFilter,在下面的代码中我展示了一个例子:

#include <QApplication>
#include <QSpinBox>
#include <QLineEdit>
#include <QKeyEvent>

class PlusRemoveHelper: public QObject{
public:
using QObject::QObject;
void addWidget(QWidget *widget){
if(widget){
widgets.append(widget);
widget->installEventFilter(this);
}
}
public:
bool eventFilter(QObject *watched, QEvent *event) override
{
if(std::find(widgets.begin(), widgets.end(), watched) != widgets.end()
&& event->type() == QEvent::KeyPress){
QKeyEvent *keyevent = static_cast<QKeyEvent *>(event);
if(keyevent->text() == "+")
return true;
}
return QObject::eventFilter(watched, event);
}
private:
QWidgetList widgets;
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSpinBox w;
w.setRange(0, 100);
PlusRemoveHelper helper;
helper.addWidget(&w);
w.show();

return a.exec();
}

如果你在一个小部件中,你可以实现相同的逻辑:

*.h

...
class QSpinBox;

class SomeClass: public SuperClass
{
...
public:
bool eventFilter(QObject *watched, QEvent *event);
private:
...
QSpinBox *SpinBox
};

*.cpp

SomeClass::SomeClass(...):
SuperClass(..)
{
SpinBox = new QSpinBox;
SpinBox->setRange(0, 100);
SpinBox->installEventFilter(this):
}


bool SomeClass::eventFilter(QObject *watched, QEvent *event){
if(watched == SpinBox && event->type() == QEvent::KeyPress){
QKeyEvent *keyevent = static_cast<QKeyEvent *>(event);
if(keyevent->text() == "+")
return true;
}
return SomeClass::eventFilter(watched, event);
}

关于c++ - Qt QSpinbox 在设置范围后接受 '+' 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52436531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com