2013-01-31 2 views
0

J'ai un lineEdit j'utiliser afin que l'utilisateur peut entrer dans un intervalle de fréquence,contoling un intervalle dans un linedit pour ints

// Making the lineedit objects only accept numbers and align it leftside 
ui->frequency->setValidator(new QIntValidator(36, 1000, this)); 
ui->frequency->setAlignment(Qt::AlignRight); 

Il fonctionne très bien à la limite supérieure 1000, mais les dos inférieurs non. J'ai donc créé une fente pour le contrôler,

// Control freqeuncy interval 
void gui::f_interval() 
{ 
    QString f = ui->frequency->text(); 
    freq = f.toInt(); 

    if (freq < 36) 
    { 
     int status = QMessageBox::warning(this,"Warning","Invalid frequency interval",QMessageBox::Ok); 
    } 
} 

et connectée au signal du lineEdit,

// Control frequency interval 
connect(ui->frequency, SIGNAL(editingFinished()), this, SLOT(f_interval())); 

de telle sorte que lorsque l'utilisateur entre un nombre inférieur à 36, il obtient une fenêtre de dialogue d'avertissement .

Mais cela ne semble pas fonctionner. Quelqu'un peut-il m'aider?

Répondre

1

Vous souhaitez vous connecter avec le signal textChanged au lieu de l'éditionFinished. LE: aussi je ne me souviens pas avoir des problèmes avec le validateur, donc pouvez-vous fournir plus de détails, comme la version Qt, la version Os, le compilateur, peut-être voir si le problème est reproduit dans un exemple de projet.

+0

Si j'utilise le textChanged, il ne produira pas l'effet que je veux. – SamuelNLP

+0

Imaginez que je veux le 300. Si je mets le premier 3 de 300, il me dira la boîte de dialogue d'avertissement parce que 3 est inférieur à 36 – SamuelNLP

+0

QT 4.8.1, Ubuntu 12.04 LTS x86 – SamuelNLP

Questions connexes