2010-04-09 20 views
7

Estoy intentando simplemente guardar un archivo. Sin embargo, necesito un nombre de archivo ingresado sin un sufijo para obtener automáticamente un sufijo predeterminado (que setDefaultSuffix() hace).Qt QFileDialog: ¿Diálogos nativos solo con funciones estáticas?

Prefiero no perder completamente el diálogo de guardar nativo solo para esto. exec() no está sobrecargado de QDialog, por lo que omite por completo el enlace nativo (ignorando la opción DontUseNativeDialog, incluso si es falso).

Si desactivo la advertencia de sobreescritura del archivo y agrego el sufijo por defecto después de que la función retorna, entonces volvería a abrir el diálogo si el usuario no desea sobrescribir ... y eso es feo.

¿Hay alguna señal que pueda detectar e inyectar rápidamente el sufijo predeterminado si no está allí? Supongo que no, ya que es un diálogo nativo.

¿Hay algo que estoy haciendo mal con el filtro? Solo tengo una opción de filtro. Debería usar esa extensión.

Esto parece bastante cojo. Iniciar el cuadro de diálogo Guardar y simplemente escribir "prueba" nunca debe dar como resultado un archivo sin extensión. "prueba". Sí. "prueba" de ninguna manera. Eso realmente confundirá a los usuarios cuando presionen Cargar y no puedan ver el archivo que acaban de guardar.

Supongo que la parte multiplataforma de Qt me está dando la funcionalidad de diálogo de archivo de denominador común más baja?

Respuesta

5

Sí, si observa el código fuente de Qt es evidente que solo las funciones estáticas usan diálogos de archivos nativos. No es posible obtener diálogos nativos de otra manera, desafortunadamente ...

0

¿Has probado las opciones de filtro en las funciones estáticas? [Editar:. Vaya, se dio cuenta de que ya tiene]

Acabo de intentar esto por mí mismo, por ejemplo, y las cosas parecen ser bastante razonable:

QString filter = "Text files (*.txt)"; 
QString selectedFilter; 
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter); 

Introducción prueba en el Guardar retornos de diálogo test.txt.
Ingresando prueba. en el diálogo de guardar devuelve test..txt.
Ingresando test.foo en el diálogo de guardar devuelve test.foo.

Todos estos muestran el diálogo de sobrescritura apropiado si ya hay un archivo existente con ese nombre.

La única manera que puedo conseguir prueba, sin ningún tipo de sufijos, es rodeándola con comillas ("prueba"), o introduciendo primero *. * (lo que hará que se vea todos los archivos) y luego ingresando prueba. (Aunque una rareza es que selectedFilter aún contendrá el filtro que se muestra en el cuadro de diálogo, incluso si no se utiliza).

+0

Quizás es una cosa de plataforma. Mi diálogo nativo es GTK (GNOME/Linux), ¿cuál es el tuyo? – darron

+0

El mío es Windows. Supongo que es ahí donde radica la diferencia. – richardwb

Cuestiones relacionadas