gpt4 book ai didi

c++ - 在 QDialog 中使用 Popup 标志和模态在主窗口上自动聚焦于 QLineEdit

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:21 25 4
gpt4 key购买 nike

我有一个基于 QDialog 的类,其中包含 QLineEdit 和一些按钮。它是通过 QGraphicsScene 的上下文菜单事件调用的,我希望它的行为如下:

  1. 调用时自动聚焦于 QLineEdit(构造函数中存在 ui->lineEdit->setFocus())
  2. 没有任务栏图标,也没有框架(关于 Qt::Popup 标志)
  3. parent=0
  4. 主窗口的模态

使用 parent = 0 实现 1 并提供模态以及框架和任务栏图标。

Qt::Popup 单独删除了框架和任务栏图标,但也破坏了对 lineEdit 和模态的关注。

我将不胜感激任何建议,因为我花了很多时间试图找到不同 WindowFlags 等的正确组合。主要问题似乎是当任何 WindowFlag 被应用或 parent 小部件被定义,完全失去了对 lineEdit 的关注。

void GraphicsScene::resolveContextMenuAction_(QAction *action)
{
if(action == this->contextMenuEventOpenDialog_)
{
TestDialog* DWD = new TestDialog(0);

//this->DWD->setWindowFlags(Qt::Popup)

int result = DWD->exec();

...
}
}

构造函数:

TestDialog::TestDialog(QWidget *parent) : QDialog(parent), ui(new Ui::TestDialog)
{
this->ui->lineEdit->setFocus();
}

焦点选项卡顺序也进行了调整,使 lineEdit 成为第一个。在最坏的情况下,如果只有提到的其他功能,我不会接受像 Qt::Popup 那样的模态。

如果它依赖于操作系统——我使用的是 Ubuntu 12.04。

最佳答案

试试 setWindowFlags(Qt::Tool) 怎么样。不要调用 exec(),这不是一个好方法,调用 setModal(true),然后调用 show(),这将显示模式对话框,并调用 activateWindow 将焦点设置到工具窗口。lineeidt 将自动聚焦。如果你不想要窗口的框架和边框,rty Qt::FramelessWindowHint 标志。在构造函数中调用 setFocus 没有用。

关于c++ - 在 QDialog 中使用 Popup 标志和模态在主窗口上自动聚焦于 QLineEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240021/

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