QIntValidator和QLineEdit一起用很蛋疼?

横云断岭
领域专家: 后端开发技术领域
2010-11-22 01:41:56
想用来限制QLineEdit只能输入某一范围的整数。比如(100,200)
但是杯具的是QIntValidator只限制比200大的数不可以输入,比100小的数却可以输入。
而且当QLineEdit失去焦点,或者回车时输入的数不会自动改正,也不会有提醒信息。

蛋疼的是QLineEdit的两个signal:
void editingFinished ()
void returnPressed ()
都是在QIntValidator的state是QValidator::Acceptable,即输入的数是(100,200)之间时才发出。

请问怎样实现当输入比100小的数时,失去焦点时可以自动修正,或者弹个提示框?

validator.h

#ifndef VALIDATOR_H
#define VALIDATOR_H

#include <QWidget>
#include <QtGui>
#include <QIntValidator>
#include <QDoubleValidator>

class Validator : public QWidget
{
Q_OBJECT
private:
int m_int;
double m_double;
QLineEdit *intEdit;
QLineEdit *doubleEdit;
QIntValidator *intVal;
QDoubleValidator *douVal;
public:
explicit Validator(QWidget *parent = 0);

signals:

public slots:
void nodify();

};

#endif // VALIDATOR_H



validator.cpp

#include "validator.h"

#include <QHBoxLayout>

Validator::Validator(QWidget *parent) :
QWidget(parent)
{
intVal = new QIntValidator(100, 200, this);

intEdit = new QLineEdit(this);
doubleEdit = new QLineEdit;

douVal = new QDoubleValidator;

intEdit->setValidator(intVal);


QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(intEdit);
layout->addWidget(doubleEdit);
this->setLayout(layout);

//无效
connect(intEdit, SIGNAL(editingFinished()), this, SLOT(nodify()));
connect(intEdit, SIGNAL(returnPressed()), this, SLOT(nodify()));

}

void Validator::nodify()
{
int n = (intEdit->text()).toInt();
if(n < 100 )
n = 100;

intEdit->setText(QString("%1").arg(n));
}


...全文
3630 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbzhang800 2010-11-22
  • 打赏
  • 举报
回复 1
答案很简单,你可以先自己尝试解决。中午有时间的话我会整理一下这个问题的两个答案
横云断岭 2010-11-22
  • 打赏
  • 举报
回复
额,原来要QLineEdit会调用fixup
fixup() is provided for validators that can repair some user errors. The default implementation does nothing. QLineEdit, for example, will call fixup() if the user presses Enter (or Return) and the content is not currently valid. This allows the fixup() function the opportunity of performing some magic to make an Invalid string Acceptable.

自己写了个,勉强可以了。。

class MyValidator : public QIntValidator
{
Q_OBJECT
public:
explicit MyValidator(QObject * parent = 0):QIntValidator(parent)
{
}
MyValidator(int bottom, int top, QObject * parent):QIntValidator(bottom, top, parent)
{
}
virtual void setRange(int bottom, int top)
{
QIntValidator::setRange(bottom, top);
}
~MyValidator()
{
}
virtual State validate(QString &s, int &n) const
{
return QIntValidator::validate(s, n);
}
virtual void fixup(QString &s) const
{
s = QString("%1").arg(bottom());
}
};

dbzhang800 2010-11-22
  • 打赏
  • 举报
回复
http://hi.baidu.com/cyclone/blog/item/663709236315e95e925807d1.html
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL服务器的操作系统部署流程包含一系列细致的环节,其适用范围涵盖多种操作系统类型,例如Windows Server与Red Hat Linux等。在启动部署之前,必须确认服务器的光驱设备为DVD驱动器,并且需准备对应的系统安装媒介。下面将详细列出完整的部署步骤: 1. **启动准备**:将随服务器提供的Systems Management Tools and Documentation version 6.0光盘置入服务器光驱,随后设定服务器以光驱作为启动设备。此环节旨在确保服务器在启动阶段能够读取安装光盘内容。 2. **语言设定**:服务器启动后,选定简体中文作为部署语言,并确认接受许可协议条款。 3. **时区选择**:在部署期间,需设定时区为北京、香港、重庆或乌鲁木齐,依据实际地理位置进行适配选择。 4. **系统类型选择**:随后,需选定计划部署的操作系统,支持的版本包括Server 2003 SP2、Server 2003 SP2 64位版本、Windows 2003 SBS SP2、Server 2008、Windows 2008 SBS/EBS x64版本等,以及多种Red Hat和SUSE Linux版本。 5. **RAID设定**:若服务器出厂时已预设RAID配置,则可选择跳过此步骤。若需重新设定RAID,操作时需格外小心,因为这一过程可能引发硬盘数据遗失。 6. **引导分区规划**:设定引导分区的大小,通常C盘建议预留至少20GB的空间,具体容量需根据系统需求进行调整。 7. **网络设定**:网络设定可在系统部署完成后执行,部署期间建议暂时拔除...

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧