Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions

Starting processes with IO redirection

This example shows you how to start other processes with TQt and how IO redirection is done. The example tries to start the uic (a tool that comes with the TQt Designer) on a certain ui file and displays the output of the command.


Implementation (process.cpp):

/****************************************************************************
** $Id: qt/process.cpp   3.3.8   edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
**
** This file is part of an example program for TQt.  This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/

#include <ntqobject.h>
#include <ntqprocess.h>
#include <ntqvbox.h>
#include <ntqtextview.h>
#include <ntqpushbutton.h>
#include <ntqapplication.h>
#include <ntqmessagebox.h>

#include <stdlib.h>

class UicManager : public TQVBox
{
    TQ_OBJECT

public:
    UicManager();
    ~UicManager() {}

public slots:
    void readFromStdout();
    void scrollToTop();

private:
    TQProcess *proc;
    TQTextView *output;
    TQPushButton *quitButton;
};

UicManager::UicManager()
{
    // Layout
    output = new TQTextView( this );
    quitButton = new TQPushButton( tr("Quit"), this );
    connect( quitButton, SIGNAL(clicked()),
            tqApp, SLOT(quit()) );
    resize( 500, 500 );

    // TQProcess related code
    proc = new TQProcess( this );

    // Set up the command and arguments.
    // On the command line you would do:
    //   uic -tr i18n "small_dialog.ui"
    proc->addArgument( "uic" );
    proc->addArgument( "-tr" );
    proc->addArgument( "i18n" );
    proc->addArgument( "small_dialog.ui" );

    connect( proc, SIGNAL(readyReadStdout()),
            this, SLOT(readFromStdout()) );
    connect( proc, SIGNAL(processExited()),
            this, SLOT(scrollToTop()) );

    if ( !proc->start() ) {
        // error handling
        TQMessageBox::critical( 0,
                tr("Fatal error"),
                tr("Could not start the uic command."),
                tr("Quit") );
        exit( -1 );
    }
}

void UicManager::readFromStdout()
{
    // Read and process the data.
    // Bear in mind that the data might be output in chunks.
    output->append( proc->readStdout() );
}

void UicManager::scrollToTop()
{
    output->setContentsPos( 0, 0 );
}

int main( int argc, char **argv )
{
    TQApplication a( argc, argv );
    UicManager manager;
    a.setMainWidget( &manager );
    manager.show();
    return a.exec();
}

#include "process.moc"

See also TQProcess Examples.


Copyright © 2007 TrolltechTrademarks
TQt 3.3.8