首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSpinBox中的验证

QSpinBox中的验证
EN

Stack Overflow用户
提问于 2012-09-27 15:22:07
回答 5查看 6.8K关注 0票数 2

我的QSpinBox应该只接受奇数,所以我将初始值设置为3,并将步长设置为2。

代码语言:javascript
复制
QSpinBox* spinBox = new QSpinBox;
spinBox->setValue(3);
spinBox->setSingleStep(2);

当我使用旋转框箭头修改值时,一切都是正常的。但是当我从键盘上输入值时,它可以接受不是奇数的。

那么,是否可以在不继承QSpinBox并重新定义其validate方法的情况下设置满足我需求的验证呢?

我目前的解决方案是,如果值为奇数,则检查slot:

代码语言:javascript
复制
void MyWidget::slotSetSpinBoxValue(int value)
{
    if(value%2 != 0)
    {
         //call function which takes only odd values
    }
    else
    {
        //here I want to show some kind off message that value can only be odd
        //call function with --value parameter
    }
}

第二个问题是如何显示QSpinBox的一些提示?我想要显示提示,如工具提示显示与消息,即QSpinBox值应该是奇数。我在QWidget中找到了statusTip属性,但找不到如何使用它的示例。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-27 15:56:43

你可以使用valueChanged()插槽来解决这个问题:

代码语言:javascript
复制
void MainWindow::on_spinBox_valueChanged(int arg1)
{
    if( arg1 % 2 == 0)
    {
        //for even values, show a message 
        QMessageBox b;
        b.setText("Only odd values allowed!");
        b.exec();
        //and then decrease the value to make it odd 
        ui.spinBox->setValue( arg1 - 1 );
    }
}

现在,如果您希望保留旧值以防used输入偶数,则必须从QSpinBox继承,或者使用事件过滤器来捕获按键事件,并在值更改之前执行操作。

要在用户将鼠标悬停在微调框上时显示消息,您需要设置该框的toolTip,它包含将要显示的字符串:

更新:如果您不需要消息框,您可以:

  • 使用QStatusBar。它可以显示仅持续一段时间的消息(即您传递的消息)。它的缺点是,消息将出现在窗口底部的栏上,而不是靠近微调框下的spinbox.
  • Place a标签。当用户输入无效值时,将标签的文本设置为类似“只允许奇数值”的内容;当用户输入正确的值时,设置空字符串。你也可以动态地这样做:当用户输入一个错误的值,并创建一个带有警告文本的QLabel,并设置Qt::WA_DeleteOnClose标志,这样标签就会在使用QTimer singleShot时自行删除,并将其设置为几秒钟后触发(当你想让消息将定时器的信号发送到标签的close()槽时)。当计时器到期时,标签将被关闭,并且,由于WA_DeleteOnClose,将被删除。

票数 0
EN

Stack Overflow用户

发布于 2014-03-10 03:22:07

您可以连接到editingFinished信号并修复它:

代码语言:javascript
复制
void Obj::onSpinEditFinished()
{
    int val = ui->spinPoints->value();
    if(val % 2 == 0)
        ui->spinPoints->setValue(val-1);
}
票数 4
EN

Stack Overflow用户

发布于 2015-02-27 17:34:23

关于Richard的评论,我认为ctrl->setKeyboardTracking(false)可以绕过在每次击键时进行的检查,并且只允许在最后进行验证。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12616120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档