2017-09-26 169 views
0

我想限制與QInputDialog,並且只有getIntgetDoublegetItemgetString。只有getSring可以採用像「a,b,c,d,e,f」這樣的字符。然而,是否有某種方式來限制getString僅採取0~9||"a-f"如何QInputDialog的輸入十六進制數字內容:: gettext的

+0

現在我知道我的自定義對話框,並使用正則表達式來限制內容。 –

+0

你想返回一個字符串或數字嗎? – eyllanesc

回答

1

QSpinBox是面向於來自客戶端的輸入得到的數字窗口小部件,這具有指示其中數值基礎它希望使用,在這種情況下,需要該方法setDisplayIntegerBase()使用底座16

所以,如果你看一下getInt()有一個內部QSpinBox那麼只有屬性應該被啓用的方法,有沒有直接的方法來獲得QSpinBox,但我們可以用findchild()方法。

#include <QInputDialog> 
#include <QSpinBox> 

static QString getHex(QWidget *parent, 
         const QString &title, 
         const QString &label, 
         int value = 0, 
         int min = -2147483647, 
         int max = 2147483647, 
         int step = 1, 
         bool *ok = Q_NULLPTR, 
         Qt::WindowFlags flags = Qt::WindowFlags()){ 
    QInputDialog dialog(parent, flags); 
    dialog.setWindowTitle(title); 
    dialog.setLabelText(label); 
    dialog.setIntRange(min, max); 
    dialog.setIntValue(value); 
    dialog.setIntStep(step); 
    QSpinBox *spinbox = dialog.findChild<QSpinBox*>(); 
    spinbox->setDisplayIntegerBase(16); 

    bool ret = dialog.exec() == QDialog::Accepted; 
    if (ok) 
     *ok = ret; 
    return spinbox->text(); 
} 

例子:

#include <QApplication> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    qDebug()<<getHex(Q_NULLPTR, "title", "label", 0x1d, 0); 
    return 0; 
} 

截圖:

enter image description here

+0

這只是我正在尋找的方式。謝謝你給我的所有幫助。 –

相關問題