1

で null の代わりにダッシュを描画する必要がありますQSpinBox。また、ヌルキーを押すのと同じダッシュキーを押す必要があります。

これどうやってするの?

4

1 に答える 1

3

使用できますsetSpecialValueText()

 QSpinBox spinBox;
 spinBox->setSpecialValueText(tr("-"));

次に、関数を接続して特別な値が選択されているかどうかを確認でき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を作成し、押されたキーがダッシュかどうかを確認する必要があります。ダッシュの場合は、別の関数を呼び出して何かを行うことができます。編集:ところで、のインデックスspecialValueText()は0です。

編集QShortcut:または、メイン関数でa を作成できます。

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

編集の続き: doSomething() はスロット関数です。たとえばvoid doSomething();private slots:ヘッダーファイルのセクションに入れます。cpp ファイルで、次のような関数を定義します。

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

編集はまだ続きprotected:ます: 次のようにヘッダーで関数を宣言する必要があります。

 virtual void keyPressEvent(QKeyEvent *event);

次に、cpp ファイルでこの関数を定義する必要があります。このような:

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

この機能のためにシグナルやスロットを接続する必要はありません。イベントです。

つまり、ダッシュが押されたときui->spinBox->setValue(0);

そのため、範囲が 0 から始まる spinBox を作成する必要があります。

 spinBox->setRange(0, 100);

つまり、

 if(spinBox->value() == 0)
      //Then specialValueText is selected.
于 2015-02-07T12:34:53.517 に答える