Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt] Automatyczne zamykanie okienka

Ostatnio zmodyfikowano 2017-09-25 14:52
Autor Wiadomość
Monika90
» 2017-09-22 15:56:22
prawdopodobnie coś takiego
C/C++
void MainWindow::actual()
{
    QString name = "Pobieranie";
    SecWindow * secWindow = new SecWindow;
    secWindow->setModal( true );
    secWindow->setWindowTitle( name );
    secWindow->show();
   
   
    QProcess * proc = new QProcess;
    proc->start( "sciezka/plik.sh" );
   
    connect( proc, static_cast < void( QProcess::* )( int, QProcess::ExitStatus ) >( & QProcess::finished ),
    [ secWindow ]( int, QProcess::ExitStatus ) { secWindow->close(); } );
}
tylko jeszcze musisz pomyśleć o zwalnianiu zasobów, nie wiem jak to się robi w QT, QT to nie jest normalne C++.
P-165116
mateczek
» 2017-09-22 16:31:04
C/C++
exec(); //<---- wiem, że exec blokuje proces do zamknięcia, nie wiem jak to rozwiązać inaczej :(
nie widzę twojej aplikacji ale to tutaj to chyba odpala pętle zdarzeń. Takie coś stosuje się czasami przy wątkach, ale w konstruktorze ?? To nie blokuje okna tylko zwyczajnie nie pozwala się zakończyć konstruktorowi.
A connect powinien działać

C/C++
connect( proc, SIGNAL( finish() ), secWindow, SLOT( close() ) );
wprawdzie nie ma tu mowy o zamykaniu okna ale może się przyda
https://www.youtube.com/watch?v=uv18N-Ct4ig&t=314s
P-165117
Anim
Temat założony przez niniejszego użytkownika
» 2017-09-25 09:01:53
Dziękuję za wszelkie odpowiedzi.

Wychodzi na to, że muszę trochę przebudować swój projekt. Jak uporam się z tym wszystkim to wstawię kod :D Lub będę pytał dalej ;p pozdrawiam, dobrego tygodnia :)
P-165189
Anim
Temat założony przez niniejszego użytkownika
» 2017-09-25 14:52:49
Rozwiązałem swój problem.

Faktycznie należało odpowiednio wykorzystać

C/C++
connect();

Kod wygląda tak:

C/C++
void MainWindow::copy_file()
{
    QString source = "sciezka";
   
    QDir dir;
    if( dir.exists( source ) )
    {
        QString nameInfoWindow = "Akcja...";
        infoWindow * secWindow = new infoWindow;
        secWindow->setModal( true );
        secWindow->setWindowTitle( nameInfoWindow );
        secWindow->show();
       
        QProcess * copy_proc = new QProcess();
        copy_proc->start( "sciezka2.sh" );
       
        connect( copy_proc, SIGNAL( finished( int ) ), secWindow, SLOT( close() ) ); // <- zwycięska ścieżka :)
       
    }
    else
    {
        printf( "Błąd kopiowania - Brak pliku lub niezgodność ścieżki\n" );
    }
   
}


Jednak teraz mam pewien problem ze zrozumieniem tego co dzieje się w finished(). Jako argument musi zostać podany int, który teoretycznie jest exitCode'm. I teraz moje pytanie:

dlaczego jak zrobię tak jak w powyższym przykładzie (finished(int)), to kod działa, natomiast, kiedy zrobię tak:

C/C++
int AAA = copy_proc->exitCode();
connect(..., SIGNALS( finished( AAA ) ),...,...);

to nie działa.

Raz jeszcze dziękuję wszystkim za pomoc :)
P-165193
1 « 2 »
Poprzednia strona Strona 2 z 2