Автофокусировка на QLineEdit в QDialog с флагом Popup и модальностью над главным окном

у меня есть 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.

1

Решение

Как насчет попробовать setWindowFlags (Qt :: Tool).
не вызывайте exec (), который не является хорошим способом, вызовите setModal (true), затем show () вместо этого, который покажет модальное диалоговое окно, и вызовите activWindow, чтобы установить фокус на окне инструмента. lineeidt будет автоматически сфокусирован.
если вы не хотите рамки и границы окна, установите флаг Qty :: FramelessWindowHint.
Вызов setFocus в конструкторе бесполезен.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]