Frage

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

War es hilfreich?

Lösung

You might want to try

QEventLoop loop; 
while (loop.processEvents()) 
    /* nothing */;

I found it sometimes necessary to call the loop again...

Andere Tipps

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top