簡體   English   中英

Qt QSpinbox設置范圍后接受'+'符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM