Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Puede QFileDialog seleccionar carpetas y archivos al mismo tiempo? como lograr

¿Puede QFileDialog seleccionar carpetas y archivos al mismo tiempo? como lograr

QFileDialog resuelve la mayor parte de la necesidad de seleccionar archivos y carpetas, pero consulte la documentación para obtener instrucciones:

La clase QFileDialog permite al usuario recorrer el sistema de archivos para seleccionar uno o más archivos o un directorio.

Nota: Para uno o más archivos o un directorio, encontré un requisito al crear un producto: necesito seleccionar varias carpetas y obtener el directorio de la carpeta. Probé todos los métodos, pero nada funcionó. Finalmente, encontré un consejo en Internet y lo implementé usando el siguiente método: (El código se copia directamente del proyecto) (El código se copia directamente del proyecto. Es posible que no se entienda el uso de algunos objetos, pero se entenderá no afecta el uso de códigos clave)

QString sInitialFolder = g_pref-gt; value(ADD_FOLDER_PATH, QDir::homePath()).toString()

QFileDialog fileDlg( this, tr("Seleccione la carpeta"), sInitialFolder );

fileDlg.setFileMode(QFileDialog::DirectoryOnly);

fileDlg.setOption(QFileDialog::DirectoryOnly);

QFileDialog::DirectoryOnly();

QFileDialog::DirectoryOnly()setOption(QFileDialog::DontUseNativeDialog, verdadero);

QListView *listView = fileDlg.findChildlt*; gt ();

if (treeView)

treeView-gt; setSelectionMode(QAbstractItemView::ExtendedSelection);

if (fileDlg.exec())

{

p>

QStringList carpetas = fileDlg.selectedFiles();

if(folders.size() gt; 0)

{

QString NativePath = QDir::toNativeSeparators(carpetas[0]);

QString strDir = NativePath.left(nativePath.lastIndexOf(QDir::separator ());

g_pref -gt; setValue( ADD_FOLDER_PATH, strDir);

m_ui-gt; addFileOrFolder(carpetas);

}

Puede ver que QFileDialog implementa dos vistas, es decir, dos pantallas QTreeView y QListView. Es más fácil ver la implementación interna de QFileDialog al ver este código.

Resumen: QT proporciona muchas clases convenientes, que también son muy complicadas de implementar. Sin embargo, si necesita hacer algunas modificaciones, puede implementar subclases de estas clases, pero esto requiere una gran comprensión de ellas. código fuente; de ​​lo contrario, todavía es muy difícil de usar. Este artículo proporciona una forma relativamente nueva de acceder a objetos internos utilizando métodos como findChild, que pueden ser menos riesgosos de implementar.