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

[cURL][QT] Wyświetlanie w qTableWidget ile pobrano pliku

Ostatnio zmodyfikowano 2014-01-27 20:34
Autor Wiadomość
maniek1310
Temat założony przez niniejszego użytkownika
[cURL][QT] Wyświetlanie w qTableWidget ile pobrano pliku
» 2014-01-25 18:40:36
Witam, napisałem program, który pobiera plik z internetu i mam problem z wyświetleniem w qTableWidget ile pobrano pliku. Poniżej przedstawiam funkcje odpowiedzialne za pobieranie plików i błąd jaki wyskakuje.

C/C++
void get_file( const char * url, const char * file_name, const char * mode, int a )
{
    CURL * easyhandle = curl_easy_init();
    curl_easy_setopt( easyhandle, CURLOPT_URL, url );
    std::FILE * file = std::fopen( file_name, mode );
    if( a == 1 )
         curl_easy_setopt( easyhandle, CURLOPT_NOPROGRESS, 0 );
   
    curl_easy_setopt( easyhandle, CURLOPT_PROGRESSFUNCTION, progressbar );
    curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file );
    curl_easy_perform( easyhandle );
    curl_easy_cleanup( easyhandle );
    fclose( file );
}

int progressbar( void * clientp, double dltotal, double dlnow, double ultotal, double ulnow )
{
    int dltotalcalk =( dlnow * 100 ) / dltotal;
   
    dltotal /= 1024;
    dltotal /= 1024;
    dlnow /= 1024;
    dlnow /= 1024;
   
    std::ostringstream ile_procent( std::ostringstream::ate );
   
    if( dltotal != 0 and dlnow != 0 )
    {
        ile_procent << dltotalcalk;
        ile_procent << " %";
    } else {
        ile_procent << "0 %";
    }
   
    ui->tableWidget2->setItem( 0, 0, new QTableWidgetItem( ile_procent.str().c_str() ) );
   
    return 0;
}


'ui' was not declared in this scope

Ps. ui napewno jest zadeklarowane bo używam w innych częściach programu.
P-103177
sajmon
» 2014-01-25 19:17:45
Metoda progressbar jest poza klasą twojego widgetu więc nie masz dostępu do ui :(
tak btw to Qt ma własne klasy do komunikacji sieciowej http://qt-project.org/doc​/qt-4.8/qtnetwork.html
P-103180
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 11:31:51
Wiem, ale jestem przyzwyczajony do cURL. A jak przypisuje funkcję progressbar do ui to znowu wyskakuje, że funkcja nie jest prawidłowo sformułowana (jak będę w domu to wyślę dokładny błąd).
P-103220
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 15:38:35
Jest jakaś funkcja, która tak jakby przerzuca funkcję progressbar do klasy ui ??
P-103256
sajmon
» 2014-01-26 16:26:03
Zrób z nich po prostu sloty wewnątrz klasy twojego okna i wtedy będziesz miał dostęp do ui.
P-103259
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 16:53:33
Dodałem do private slots funkcję progressbar i teraz wyskakują mi takie błędy :
'int Config_os::progressbar(void*, double, double, double, double)' is private

Plik config_os.h
C/C++
...
namespace Ui {
    class Config_os;
}

class Config_os
    : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit Config_os( QWidget * parent = 0 );
    ~Config_os();
   
private slots:
    void usun_sloty();
   
    void on_actionSystem_triggered();
   
    void on_actionP_yta_G_wna_triggered();
   
    void on_actionProcesor_triggered();
   
    void on_actionKarta_Graficzna_triggered();
   
    void on_actionZainstalowane_triggered();
   
    void on_actionO_Autorze_triggered();
   
    void on_actionDo_pobrania_triggered();
   
    void on_p_akt_down_clicked();
   
    int progressbar( void * clientp, double dltotal, double dlnow, double ultotal, double ulnow );
   
private:
    Ui::Config_os * ui;
};
...
Plik config_os.cpp
C/C++
void get_file( const char * url, const char * file_name, const char * mode, int a )
{
    CURL * easyhandle = curl_easy_init();
    curl_easy_setopt( easyhandle, CURLOPT_URL, url );
    std::FILE * file = std::fopen( file_name, mode );
    if( a == 1 )
         curl_easy_setopt( easyhandle, CURLOPT_NOPROGRESS, 0 );
   
    curl_easy_setopt( easyhandle, CURLOPT_PROGRESSFUNCTION, Config_os::progressbar );
    curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file );
    curl_easy_perform( easyhandle );
    curl_easy_cleanup( easyhandle );
    fclose( file );
}

int Config_os::progressbar( void * clientp, double dltotal, double dlnow, double ultotal, double ulnow )
{
    int dltotalcalk =( dlnow * 100 ) / dltotal;
   
    dltotal /= 1024;
    dltotal /= 1024;
    dlnow /= 1024;
    dlnow /= 1024;
   
    std::ostringstream ile_procent( std::ostringstream::ate );
   
    if( dltotal != 0 and dlnow != 0 )
    {
        ile_procent << dltotalcalk;
        ile_procent << " %";
    } else {
        ile_procent << "0 %";
    }
   
    ui->t_akt_down->setText( ile_procent.str().c_str() );
   
    return 0;
}
P-103262
sajmon
» 2014-01-26 16:58:17
No ale wszystko miałeś przerobić na sloty to get_file też i wtedy powinno śmigać elegancko
Teraz w dalszym ciągu próbujesz użyć czegoś prywatnego z klasy poza tą klasą (wtedy ui a teraz progressbar) więc nie bangla :(
P-103263
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 17:06:26
No to teraz przy każdym użyciu funkcji get_file wyskakuje get_file was not declared in this scope.
P-103265
« 1 » 2
  Strona 1 z 2 Następna strona