1

我需要在QSpinBox. 另外我需要使破折号键按下等于空键按下。

我怎样才能做到这一点?

4

1 回答 1

3

您可以使用setSpecialValueText();

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

valueChanged(QString)然后您可以检查是否通过连接功能选择了特殊值。注意,这和valueChanged(int)You can then check the value of thepassed string in a slot,如果等于特殊文本,可以做点什么。

 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在你的主要功能中创建一个。

 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 回答