у меня есть QDialog
основанный класс, который содержит QLineEdit
и несколько кнопок. Он вызывается с событием контекстного меню из QGraphicsScene
Я хотел бы, чтобы он вел себя следующим образом:
QLineEdit
когда вызывается ( ui->lineEdit->setFocus()
присутствует в конструкторе)Qt::Popup
флаг)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.
Как насчет попробовать setWindowFlags (Qt :: Tool).
не вызывайте exec (), который не является хорошим способом, вызовите setModal (true), затем show () вместо этого, который покажет модальное диалоговое окно, и вызовите activWindow, чтобы установить фокус на окне инструмента. lineeidt будет автоматически сфокусирован.
если вы не хотите рамки и границы окна, установите флаг Qty :: FramelessWindowHint.
Вызов setFocus в конструкторе бесполезен.
Других решений пока нет …