QFileDialog::getOpenFileName in console application
-
07-07-2021 - |
Question
This is a question first posted on qtforum.org where I've got no answer:
I have trouble hiding the Open dialog in a console application after it has been used. Here is the content of main.cc file used to test this behaviour:
#include <QApplication>
#include <QFile>
#include <QFileDialog>
#include <QString>
bool b_closing = false;
static QString gofn ( void )
{
QString s_file;
s_file = QFileDialog::getOpenFileName(
qApp->activeWindow(),
QObject::tr( "Select the file to open:" )
);
if ( !s_file.isEmpty() )
{
/* ... */
}
/* have no effect; */
QApplication::processEvents();
QApplication::sendPostedEvents();
return s_file;
}
static void userInpLoop ( void )
{
QFile cons_inp;
QFile cons_outp;
QString s_ln;
cons_inp.open( stdin, QIODevice::ReadOnly );
cons_outp.open( stdout, QIODevice::WriteOnly );
for ( ;; )
{
if ( b_closing )
break;
cons_outp.write( "\n>" );
cons_outp.flush();
s_ln = cons_inp.readLine().trimmed();
if ( s_ln == "q" )
{
b_closing = true;
cons_outp.write( "Closng...\n" );
}
else if ( s_ln == "gofn" )
{
cons_outp.write( gofn().toLatin1() );
}
else
{
cons_outp.write( "ERROR!!! \nInvalid input!\n" );
}
cons_outp.flush();
//break; /* just to test that a.exec() hides the dialog */
}
}
int main( int argc, char *argv[] )
{
/* we choose QApplication instead of QCoreApplication because we need some Gui components */
QApplication a(argc, argv);
userInpLoop();
//return a.exec(); /* this will hide the dialog */
return 0;
}
I build the application using this .pro file:
QT += core gui
TARGET = test_gofn
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cc
OS: Ubuntu 12.04
Qt: 4.8.2 builded from the trunk
Solution
You might want to try
QEventLoop loop;
while (loop.processEvents())
/* nothing */;
I found it sometimes necessary to call the loop again...
OTHER TIPS
On Windows 7, compiled using Qt4.8.1 and Qt4.8.3 and openDialog was natural and hides after using.
Can you describe more, what happens at your side?
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow