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

[QT Creator]Nie mogę przekazać sygnału z innej klasy

Ostatnio zmodyfikowano 2015-06-14 19:27
Autor Wiadomość
kwiatek
Temat założony przez niniejszego użytkownika
[QT Creator]Nie mogę przekazać sygnału z innej klasy
» 2015-06-14 15:25:31
Witam, zaczynam swoją przygodę z QT i pojawił się niestety problem z przekazaniem sygnału, kompilator nie wyświetla żadnego problemu, ale nie widać też skutku działania. Na razie program ma tylko wyświetlić na obiekcie label komunikat czy zostało nawiązane połączenie, nie mam pomysłu czego brakuje. Dziękuję z góry za pomoc, poniżej znajdują się pliki projektu:

C/C++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QThread>
#include "system_chck.h"

namespace Ui {
    class MainWindow;
}

class MainWindow
    : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow( QWidget * parent = 0 );
    void cos();
    void run();
    ~MainWindow();
   
private slots:
    void on_connection_status_linkActivated( const QString & link );
   
    void on_label_objectNameChanged( const QString & objectName );
   
    void onping_result( int );
   
private:
    Ui::MainWindow * ui;
    system_chck * system_chck_wsk;
};

#endif // MAINWINDOW_H

C/C++
#ifndef SYSTEM_CHCK_H
#define SYSTEM_CHCK_H
#include <QThread>
#include <QDialog>
#include <QMainWindow>

class system_chck
    : public QDialog
{
    Q_OBJECT
    int ping;
   
public:
    int state;
   
    int network_chck();
   
    signals:
    void ping_result( int );
};

#endif

C/C++
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "system_chck.h"
#include <unistd.h>
#include <QThread>
#include <iostream>

MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
     , ui( new Ui::MainWindow )
{
    ui->setupUi( this );
    // system_chck sp1;
    //  sp1.network_chck();
   
    system_chck_wsk = new system_chck();
    system_chck_wsk->network_chck();
    connect( system_chck_wsk, SIGNAL( ping_result( int ) ), this, SLOT( onping_result( int ) ) );
    //ui->label -> setText("Test");
}

MainWindow::~MainWindow()
{
   
    delete ui;
   
}

void MainWindow::cos()
{
}

void MainWindow::onping_result( int state )
{
    //  while(true) //sprawdzanie polaczenia internetowego
    //   {
    if( state == 0 )
    {
        ui->label->setText( "Nawiazano polaczenie!" );
        // break;
    }
    else
    {
        ui->label->setText( "Brak polaczenia!" );
        sleep( 3 );
    }
    //}
}

void MainWindow::on_connection_status_linkActivated( const QString & link )
{
}

void MainWindow::on_label_objectNameChanged( const QString & objectName )
{
}

C/C++
#include "system_chck.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <unistd.h>

int system_chck::network_chck()
{
    ping = system( "ping -c1 google.com >&-" );
    state = WEXITSTATUS( ping ); //stan zwracany przez komende ping
    return state;
    emit ping_result( state );
}
P-133562
Monika90
» 2015-06-14 16:35:48
C/C++
return state;
emit ping_result( state );
emit się nigdy nie wykona, bo jest po return.
P-133567
kwiatek
Temat założony przez niniejszego użytkownika
» 2015-06-14 19:11:23
Zakomentowanie return niestety nic nie zmieniło.
P-133573
Monika90
» 2015-06-14 19:25:37
Wywołujesz system_chck_wsk->network_chck(); zanim podłączysz slot do sygnału, więc nic dziwnego, że nie możesz odebrać.
P-133575
kwiatek
Temat założony przez niniejszego użytkownika
» 2015-06-14 19:27:50
Faktycznie, działa, dziękuję za pomoc :)
P-133576
« 1 »
  Strona 1 z 1