2017-09-26 4 views
0

私はQInputDialogと入力六角番号にしたい、とだけgetIntgetDoublegetItemgetStringがあります。 getSringだけが "a、b、c、d、e、f"のようにcharを取り込むことができます。しかし、この場合には、それが必要である、0~9||"a-f"::のgetText

+0

今、私は私のカスタムダイアログを実現し、内容を制限するために正規表現を使用しています。 –

+0

文字列または数値を返しますか? – eyllanesc

答えて

1

QSpinBoxがクライアント入力から番号を取得するように配向ウィジェットであり、これは使用することが望まれている数値ベースに示す方法setDisplayIntegerBase()を有する取るだけgetStringを制限する何らかの方法がありますあなたが唯一のそのプロパティを有効にする必要がある内部QSpinBoxがありgetInt()方法を見ればベース16

を使用することはそう、そこに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

これは私が探している方法です。あなたが私に与えるすべての助けに感謝します。 –