2015-02-07 1 views

답변

2

setSpecialValueText()을 사용할 수 있습니다.

valueChanged(QString) 기능을 연결하여 특수 값이 선택되어 있는지 확인할 수 있습니다. 이것은 valueChanged(int)과 다릅니다. 전달 된 문자열의 값을 슬롯에서 확인할 수 있으며, 특수 텍스트와 같으면 뭔가 할 수 있습니다.

main() 
{ 
     connect(spinBox, SIGNAL(valueChanged(QString)), this, SLOT(doSomething(QString))); 
} 

void doSomething(QString valueStr) 
{ 
    if(valueStr == spinBox->specialValueText()) 
      // Do something 
    else 
      //Convert valueStr to int and do other stuff 
} 

아니면 이런 일 할 수있는 : 다른 질문에 대해

main() 
{ 
     connect(spinBox, SIGNAL(valueChanged()), this, SLOT(doSomething())); 
} 

void doSomething() 
{ 
    if(spinBox->value() == 0) 
      // Do something with dash 
    else 
      //Do something with the value 
} 

, 당신은 keyPressEvent을 만들고 누른 키가 대시인지 아닌지 확인해야합니다. 대시라면 다른 기능을 호출하여 작업을 수행 할 수 있습니다. 편집 : BTW, specialValueText()의 인덱스는 0입니다.

편집 : 또는 주 기능에 QShortcut을 만들 수 있습니다. 해봐요()가 슬롯의 함수이다 :

new QShortcut(QKeySequence(Qt::Key_Minus), this, SLOT(doSomething())); 

편집은 계속. 예를 들어 void doSomething();을 헤더 파일의 private slots: 섹션에 넣습니다.

void MainWindow::doSomething() 
{ 
    ui->spinBox->setValue(0); 
    //This is the slot called when you press dash. 
} 

편집은 여전히 ​​을 계속

: 당신은이 같은 헤더에 protected: 함수를 선언해야합니다 그리고 CPP 파일에 다음과 유사한 함수를 정의

virtual void keyPressEvent(QKeyEvent *event); 

는 다음을 수행해야 cpp 파일에서이 함수를 정의하십시오. 이와 같이 :

void MainWindow::keyPressEvent(QKeyEvent *event) 
{ 
    if(event->key() == Qt::Key_Minus) 
     ui->spinBox->setValue(0); 
} 

이 기능을 사용하기 위해 신호 나 슬롯을 연결할 필요는 없습니다. 그것은 사건입니다. 대시는 당신이 0

의미
spinBox->setRange(0, 100); 

부터 시작 범위와 spinBox를 작성해야, 그 때문에의

ui->spinBox->setValue(0);을 눌렀을 때

if(spinBox->value() == 0) 
     //Then specialValueText is selected. 
+0

감사를 의미한다! 'specialValueText'는 내가 필요한 것입니다. 이제 QSpinBox는 대시 입력을 키보드로 허용합니다! 그러나 포커스를 잃었을 때 (또는 새로운 가치를 해결해야하는 다른 일이 일어나고있을 때) 가치가 회복됩니다. 어쩌면 대시를 받아들이고 'keyPressEvent'를 사용하는 더 좋은 방법이 있을까요? – Ufx

+0

setValue()를 사용하고 있습니까? –

+0

당신은 setValue (0); 대시를 누르면. –

관련 문제