2010-06-10 83 views
2

我想通过继承QDialog来创建登录对话框。 我把子命名一个LoginDialog 2个QLineEdits:Qt - 登录对话框

  1. 进行登录
  2. 密码。

我希望能够警告用户一条消息,如果大写锁定为ON,而他将开始填写passwordLineEdit。假设我有一个告诉CapsLock按钮当前状态的函数。所以我想在LoginDialog类中做eventFiltering以便了解用户开始填写密码字段(即用户刚进入密码字段)

所以为此我在LoginDialog类的构造函数中写了如下内容:

m_passwordLineEdit->installEventFilter(this); 

所以唯一要做的就是实现一个可以理解用户将填写密码的函数。

bool LoginDialog::eventFilter(QObject *target, QEvent *event) 
{ 
    if (target == m_passwordLineEdit) 
    { 


    } 
    return QDialog::eventFilter(target, event); 
} 

我的问题是:好像是应该用下面的函数(?)来完成如何实现这个功能???

回答

3

定义了一类新

class LoginPassword : public QLineEdit 
{ 
    void eventFilter(QObject *object, QEvent *event) 
    } 

    bool LoginPassword:eventFilter(QObject *object, QEvent *event) 
    { 
    if(event->type() == QEvent::KeyPress) 
    { 
     // Insert your logic here 
    } 
    } 
} 

在对keyPressed事件 这样eventfilter功能检查,你会当用户开始输入密码

不显示弹出能够赶上的情况。这不好。 只是显示一个工具提示类型的东西像在Windows XP 或在登录对话框的底部显示一条状态消息

+0

我找不到一个简单的例子如何应用工具提示(和显示消息)到QLineEdit。有人可以帮助我吗? – Narek 2010-06-10 13:19:51

1

当用户开始键入时弹出消息不是一个很好的可用性风格;相反,我会这样做,就像在Windows 7登录屏幕中完成的一样,只要按下CAPSLOCK键,只在密码编辑字段旁边显示警告图标和消息。请记住,您还应该检查CAPSLOCK键的初始状态。

如果你使用Win32,你可以使用下面的代码,以确定是否CAPSLOCK键被按下:(::GetKeyState(VK_CAPITAL) & 0x1)

1

你可以用它来获取键盘功能键的状态(从文档什么说我的天堂没有经过测试),但它应该做到这一点。 keyboardModifiers是静态函数,所以你可以把它当行编辑文本改变这样的:

connect(lineEdit , SIGNAL(textChanged()), this, SLOT(checkCapsLock)); 

和checkCapsLock看看它压我不知道,如果它的最好的方式,但它应该工作。

+0

在那个文档中,我不能看到CapsLock作为键盘修改器 – 2010-06-10 12:47:23

+0

在qt论坛上的帖子,平台依赖于如何做到这一点的例子http://www.qtforum.org/article/32572/how-to-determine-如果-大写锁 - 是 - 上跨平台。HTML我想在qt中没有内置的方式来获得初始状态(或者我还没有找到它:D)你可以通过GetKeyState(VK_CAPITAL) – Olorin 2010-06-10 13:24:24

+0

获得窗口对不起,我没有注意到capslock不是作为一个键盘修饰符呈现怪异的,但看到我以前的解决方案的评论 – Olorin 2010-06-10 19:51:19