LINUX.ORG.RU

QFileDialog захватывает фокус виджета

 


0

1

Имеется хитрый кастомный диалог. Левая его половина представляет собой QListView, а правая — стековый лэйаут QDialog'ов, которые прокручиваются в соответствии с QListView. Одним из диалогов в этом стеке является QFileDialog. Когда стек прокручивается до него, он перехватывает фокус с QListView на себя, чем несказанно бесит. Как можно победить подобное поведение?

★★★★★

Можно сделать свой файловый диалог с помощью QFileSystemModel

Или возвращать вручную фокус с помощью setFocus()

Или поиграться с setFocusPolicy()

unfo ★★★★★
()
Последнее исправление: unfo (всего исправлений: 1)

* setFocusPolicy
* наследование от QFileDialog и переопределение focusInEvent

Но сама архитектура диалога состоящего из диалогов мне кажется странной.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Если честно, я слизал её с диалога создания нового документа в Krita. Собственно у меня оно выполняет такую же функцию.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

Единственное, что я никак не могу понять, зачем там используются диалоги вместо виджетов. Одно дело, когда необходимо отобразить модальное окно - в этом случае действительно диалог подходит на 100%.

trex6 ★★★★★
()

Насколько я понял, проблема QLineEdit'е являющемся частью QFileDialog'а, который по природе своей жёстко акцептирует фокус на себя. Пока решил при помощи костыля (тот же код, что вынимает на свет божий QFileDialog, принудительно выставляет фокус на QListView), но хотелось бы чего-то более элегантного.

KblCb ★★★★★
() автор топика
Ответ на: комментарий от trex6

Я безусловно могу использовать виджеты. Только пририсую им по buttonBox'у, а FileDialog так и вовсе перерисую заново. FileDialog мне перерисовывать не хочется. Не потому что лень или сложно, а потому что не фига их плодить. Ну, а остальные сделал диалогами как-то машинально, для пущей однообразности. В принципе поменять на QWidget с минимальными перестановками в сигналах и слотах не сложно. А в этом есть какой-то смысл?

KblCb ★★★★★
() автор топика
Ответ на: комментарий от KblCb

На мой взгляд это было бы логичнее. По поводу QFileDialog, сегодня попробую посмотреть, как его можно отучить от такого нехорошего поведения. Если будут результаты - скину в эту тему.

trex6 ★★★★★
()
Ответ на: комментарий от KblCb

Пока решил при помощи костыля (тот же код, что вынимает на свет божий QFileDialog, принудительно выставляет фокус на QListView), но хотелось бы чего-то более элегантного.

вполне нормальное решение, не извращайся

dt1 ★★
()

плюсую dt1.

Вполне нормальное решение. Больше всяких велосипедов нагородишь, пока решишь проблему по-другому...

solovey ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.