在QDialog中使用弹出标记和主窗口上的模态自动对焦QLineEdit

时间:2013-06-21 16:25:16

标签: c++ qt focus taskbar qdialog

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

  1. 调用时QLineEdit上的自动对焦(构造函数中存在ui->lineEdit->setFocus()
  2. 没有任务栏图标且没有框架(与Qt::Popup标志相同)
  3. 主窗口上的模式parent=0
  4. 使用parent = 0履行1并提供模态,但也提供框架和任务栏图标。

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

    我会感激任何建议,因为我有很多时间试图找到不同WindowFlags等的正确组合。主要问题似乎是当应用任何WindowFlag或{时{1}}小部件被定义为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一样的模态。

    如果它依赖于操作系统 - 我正在使用Ubuntu 12.04。

1 个答案:

答案 0 :(得分:0)

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