Во-первых, вы можете получить сигнал двойного щелчка от QTreeView;это:
void doubleClicked( const QModelIndex & index );
Во-вторых, если вы действительно хотите использовать QFileDialog таким образом, сначала переопределите closeEvent (событие QCloseEvent *).Внутри, если вы хотите закрыть диалог, выполните event-> accept (); в противном случае просто выполните event-> ignore () ;.Соединиться с QFileDialog :: currentChanged (const QString & path);чтобы получить имя файла, пользователь дважды щелкает.И последнее: обязательно создайте QFileDialog в куче (используя new), а не в стеке (локальном), и вызовите show () для него вместо exec ().
Помните, что выможете предоставить его родителю (это), и вам не нужно будет удалять его позже.