我正在将MFC应用程序移植到Qt 5.4并使用QWinWidget作为QDialog派生类的容器。一切都很好,除非我键入,例如, Ctrl + X , Ctrl + V , Ctrl + S 等,然后这些组合键由主MFC文档事件处理程序处理,完全绕过QT对话框。 QDialog小部件中的keyPress()事件过滤器看不到它们。
QWinWidget *win = new QWinWidget(::AfxGetApp()->m_pMainWnd);
win->showCentered();
CMyDlg dlg(win);
if (dlg.exec()) {
QMessageBox::information(win, "ModalDialog Result", "OK");
}
else {
QMessageBox::information(win, "ModalDialog Result", "Cancel");
}
答案 0 :(得分:1)
基本上我发现这是使用MFC中的QT窗口小部件创建模态对话框的“错误方法”。正确的方法是使用MFC CDialog并在CDialog中插入QWinWidget。
int CQTControlTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){
if (CDialog::OnCreate(lpCreateStruct)==-1){
return -1;
}
QWinWidget *winWidget = new QWinWidget(this->m_hWnd);
CRect rect;
this->GetClientRect(&rect);
winWidget->setGeometry(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top-40);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(widget_);
winWidget->setLayout(layout);
winWidget->move(0,0);
winWidget->show();
return 0;
}