[Qt] Automatyczne zamykanie okienka
Ostatnio zmodyfikowano 2017-09-25 14:52
Monika90 |
» 2017-09-22 15:56:22 prawdopodobnie coś takiego 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++. |
|
mateczek |
» 2017-09-22 16:31:04 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ć 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 |
|
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 :) |
|
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ć Kod wygląda tak: 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() ) ); } 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: int AAA = copy_proc->exitCode(); connect(..., SIGNALS( finished( AAA ) ),...,...);
to nie działa. Raz jeszcze dziękuję wszystkim za pomoc :) |
|
1 « 2 » |