2010-06-10 76 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