當用戶點擊Esc
時,是否可以防止非模態QDialog關閉,而不是覆蓋reject()
或使用事件過濾器/ event
方法? 如果沒有,是否可以使用模態QDialog?如何通過按Esc鍵不可取消非模態QDialog?
0
A
回答
0
您可以在對話框覆蓋eventFilter,當按逃逸管理它自己:
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
this->installEventFilter(this);
}
bool MyDialog::eventFilter(QObject *obj, QEvent * event)
{
if((MyDialog *)obj == this && event->type()==QEvent::KeyPress && ((QKeyEvent*)event)->key() == Qt::Key_Escape)
{
return true;
}
return false;
}
+0
對不起,我的意思是要做到這一點,而不必重寫任何'QDialog'的方法/插槽,並且不使用事件過濾器。 –
+0
@VioletGiraffe,好的,是的,你可以修補QDialog並建立你的Qt版本。 – vahancho
0
創建基於QObject的類接收的事件: -
class MyEvents : public QObject
{
Q_OBJECT
public:
MyEvents(QObject* parent);
protected:
bool eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape)
return true;
else
return QObject::eventFilter(obj, event);
}
else
{
// standard event processing
return QObject::eventFilter(obj, event);
}
}
};
然後安裝該對象作爲對話框的事件過濾器
MyEvents* myEvents = new MyEvents;
QDialog myDialog(parent);
myDialog->installEventFilter(myEvents);
0
如果您不想使用eventFil ter,您可以使用QShortcut創建Escape的鍵盤快捷鍵並調用對話框的顯示位置。可以這樣做:
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
QShortcut * shortcut = new QShortcut(QKeySequence(Qt::Key_Escape),this,SLOT(show()));
shortcut->setAutoRepeat(false);
}
相關問題
- 1. 如何通過按Esc鍵關閉JInternalFrame?
- 2. 如何通過javascript模擬網頁上的ESC按鍵?
- 3. Powershell&取消按鈕或ESC
- 4. 通過Telnet捕獲ESC鍵?
- 5. 阻塞但非模態的QDialog?
- 6. Selenium-IDE:如何模擬不可打印的鍵(ENTER,ESC,Backspace)?
- 7. 帶好和取消按鈕的QDialog
- 8. 如何按ESC鍵關閉boxy窗口?
- 9. 如何關閉rich:popupPanel按Esc鍵?
- 10. 如何編寫Applescript以按Esc鍵?
- 11. 取消對esc按鈕的拖動
- 12. 如何通過按鍵使用按鍵?
- 13. 使用ESC鍵取消碳模式對話框
- 14. Modal(LeanModal)通過Esc鍵關閉
- 15. 如何通過掃描碼(非虛擬鍵碼)獲取關鍵狀態?
- 16. 如何模擬PC上的Esc鍵android
- 17. 通過jquery調用Esc鍵按下事件
- 18. 如何在顯示jquery通知時檢測esc按鍵
- 19. Gridview asp.net取消編輯模式按下ESC
- 20. 按Esc鍵停止調試
- 21. ipython:按'esc'鍵中斷readline
- 22. Esc按鍵事件QListView
- 23. 按ESC鍵通過robort類關閉彈出不在鉻31和firefox 26
- 24. 鍵碼不保存ESC鍵
- 25. 通過Back按鈕取消MvxAppCompatDialogFragment取消不完全
- 26. 如何通過ESC退出Notepad ++?
- 27. 如何通過按Esc關閉應用程序。在C#.NET
- 28. 窗口模式和`esc`鍵
- 29. 打破,如果Esc鍵被按下
- 30. ESC不取消選擇我的選擇
安裝事件過濾器?覆蓋按鍵按下/釋放事件? – vahancho