将 MFC 转换为 QT"就地"端口 - QWinWidget 中的 QDialog 未捕获 Ctrl-X、Ctrl-V 等
WIndows MFC to QT 'in-place' port - QDialog inside QWinWidget not catching Ctrl-X, Ctrl-V etc
我正在将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");
}
基本上,我发现这是在 MFC 中使用 QT 小部件创建模态对话框的"错误方法"。正确的方法是使用 MFC CDialog
并将QWinWidget
插入CDialog
.
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;
}
相关文章:
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- Ctrl + 不适用于在 Visual Studio 中运行该程序
- 自定义对话框(源自QDialog)不会关闭(Android)
- C++键盘挂钩 CTRL 键卡住
- QDialog 不能在 Windows 上退出,但在 MacOS 上不能退出/
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- 如何让 getc(stdin) 返回 ctrl 字符?
- 在 ov5640 上使用 V4L2 设置 ctrl
- Ncurses CTRL + s hangs getch()
- C++CTRL+C处理程序有未定义的行为
- 如果输入缓冲区不为空,请使用getchar.()检测Ctrl+d
- QDialog自行关闭,我该如何解决?
- Qt5自定义QDialog,不使用qt创建器
- Qt 键按事件处理程序仅在按下 ctrl、alt 或 shift 键时做出反应
- 我的控制台处理程序不处理 CTRL+C,即使设置正确
- 当按下QDialog取消或确定时如何调用函数?
- 如何根据标题长度调整QDialog的大小?
- 将 MFC 转换为 QT"就地"端口 - QWinWidget 中的 QDialog 未捕获 Ctrl-X、Ctrl-V 等