1

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

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

使用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。

4

1 回答 1

0

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

于 2013-06-22T10:08:54.437 回答