如何在QSpinBox中绘制破折号而不是null?

时间:2015-02-07 12:11:14

标签: qt paint keypress qspinbox

我需要在QSpinBox中绘制破折号而不是null。此外,我需要按下按键等于空按键。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用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并检查按下的键是否为破折号。如果它破折号你可以调用另一个函数来做某事。编辑:BTW,specialValueText()的索引为0.

修改:或者您可以在主要功能中创建QShortcut

 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.