gpt4 book ai didi

c++ - WIndows MFC 到 QT 'in-place' 端口 - QWinWidget 内的 QDialog 没有捕获 Ctrl-X、Ctrl-V 等

转载 作者:行者123 更新时间:2023-11-30 05:33:04 26 4
gpt4 key购买 nike

我正在将 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;
}

关于c++ - WIndows MFC 到 QT 'in-place' 端口 - QWinWidget 内的 QDialog 没有捕获 Ctrl-X、Ctrl-V 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com