[英]Qt QSpinbox accepting '+' symbol after setting range
我有一個要設置范圍的QSpinbox
:
QSpinBox *SpinBox = new QSpinBox;
SpinBox->setRange(0, 100);
但是,我可以手動輸入一個不會反映在我的廣告位中的+
號。
connect (SpinBox, SIGNAL (valueChanged (QString)), this,
SLOT (onSpinBoxChanged (QString)));
我也嘗試用int
替換QString
。 但是+
不會反映在廣告位中。
如何限制輸入+
號?
我已經提到了一些在Spintbox中禁用行編輯的Qt和StackOverflow帖子/答案:
我試圖將Spinbox的行編輯設置為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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.