Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-12-2009, 14:54   #21
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Ok, ora mi è chiaro dovrei aver fatto correttamente, debuggando mi sono assicurato che le classi accedono agli stessi dati, quel che non mi torna è cha la mia amica gui non si accorge che il thread termina, io ho usato connent in questo modo:
Codice:
connect(MyPortScanner,SIGNAL(terminated()),this,SLOT(UpdateResult()));
è il metodo giusto per procedere?
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2009, 15:51   #22
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi incolli l'header della gui ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-12-2009, 16:01   #23
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
eccolo

Codice:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QTimer>
#include "charon.h"
#include "scanport.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    enum Mode { ScanMode, StanbyMode };

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
    // Dati
    charon *dati;
    // Thread
    ScanPort *MyPortScanner;
    // Funzioni
    void SetInterface(Mode);

private slots:
    void InitScanner();
    void UpdateResult();
};

#endif // MAINWINDOW_H
già che ci sono metto anche il cpp,

Codice:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    dati = new charon;
    MyPortScanner = new ScanPort(dati);
    // Connetto pulsanti e slot
    connect(ui->startpushButton,SIGNAL(clicked()),this,SLOT(InitScanner()));
    // Connetto eventi del thread e slot
    connect(MyPortScanner,SIGNAL(terminated()),this,SLOT(UpdateResult()));
    // Setto l'interfaccia
    SetInterface(StanbyMode);
}

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

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::SetInterface(Mode currentmode)
{
    switch(currentmode)
    {
   case ScanMode:
        {
            ui->startpushButton->setEnabled(false);
            ui->stoppushButton->setEnabled(true);
            ui->hostlineEdit->setEnabled(false);
            ui->sportspinBox->setEnabled(false);
            ui->eportspinBox->setEnabled(false);
            ui->timeoutspinBox->setEnabled(false);
            ui->captionlabel->setText(tr("Scansione di \"%1\"").arg(dati->get_Host()));
            break;
        }
    case StanbyMode:
        {
            ui->startpushButton->setEnabled(true);
            ui->stoppushButton->setEnabled(false);
            ui->hostlineEdit->setEnabled(true);
            ui->timeoutspinBox->setEnabled(true);
            ui->sportspinBox->setEnabled(true);
            ui->eportspinBox->setEnabled(true);
            ui->captionlabel->clear();
            break;
        }
    }
}

void MainWindow::InitScanner()
{
    QTimer time;
    //Controllo del campo host name
    if(ui->hostlineEdit->text().isEmpty())
    {
        QMessageBox::information(this,tr("Campo host vuoto"),tr("Devi specificare un indirizzo o un nome FQDN."));
        return;
    }
    //Controllo che il range delle porte sia valido
    if(ui->sportspinBox->value() > ui->eportspinBox->value())
    {
        QMessageBox::information(this,tr("Range di porte non valido"),tr("Il range di porte dichiarato non può essere negativo"));
        return;
    }
    // Preparo dati
    dati->set_Sport(ui->sportspinBox->value());
    dati->set_Eport(ui->eportspinBox->value());
    dati->set_Host(ui->hostlineEdit->text());
    dati->set_timeout(ui->timeoutspinBox->value());
    // Inizio Thread
    SetInterface(ScanMode);
    MyPortScanner->run();
}

void MainWindow::UpdateResult()
{
    // Guardo nel buffer se ci sono nuovi dati
    ui->outplainTextEdit->setPlainText(ui->outplainTextEdit->toPlainText().append(dati->get_BufResult()));
}
edit:
tra l'altro è parecchio strano, ora ho inserito anche lo slot per il pulsante "stop", questo lavora correttamente andano ad interrompermi il thread e a chiamare UpdateResult() e SetInterface() che mi aggiorna l'interfaccia in modo corretto.

Ora poi.....
sono a casa e sul pc di casa.... la gui ha ripreso a non rispondere quando arriva a Thread->run()...

Ultima modifica di Teo@Unix : 21-12-2009 alle 22:24.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2009, 09:37   #24
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
debuggando sembra che quando arrivo a thread->run() il programma si comporti come se fosse una fuzione...
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2009, 11:10   #25
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per far partire il thread non devi chiamare il metodo run, ma il metodo start.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2009, 11:58   #26
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Acciderbolina...

funziona!
resta il problema che la gui non si accorge che il thread finisce ....
ho inserito lo slot per il tasto stop, l'ho fatto in questo modo: sembra ok

Codice:
void MainWindow::TerminateScanner()
{
    MyPortScanner->wait();
    MyPortScanner->terminate();
    SetInterface(StanbyMode);
    dati->set_BufResult(tr("\n-----> Scansione interrotta dall'utente\n"));
    UpdateResult();
}
mi sorge un dubbio, che io abbia sbagliato l'implementazione di run()?
ecco il codice:
header:
Codice:
#ifndef SCANPORT_H
#define SCANPORT_H

#include <QThread>
#include <QTcpSocket>
#include <QHostAddress>
#include "charon.h"

class ScanPort : public QThread     //Thread ScanPort eseguirà la scansione
{
private:
    charon *dati;
public:
    ScanPort(charon*); //Costruttore
    void run(); //Funzione per la scansione delle porte
};

#endif // SCANPORT_H
cpp:
Codice:
void ScanPort::run()
{
    QTcpSocket sock;
    QHostAddress remoteHost;
    QHostAddress localHost;
    remoteHost.setAddress(dati->get_Host());
    localHost = QHostAddress(QHostAddress::LocalHost).toString();

    unsigned int curPort;
    unsigned int Sport = dati->get_Sport();
    unsigned int Eport = dati->get_Eport();
    short int timeout = dati->get_timeout();

    for(curPort = Sport; curPort <= Eport; curPort++)
    {
        sock.abort();
        sock.connectToHost(remoteHost,curPort);
        if(sock.waitForConnected(timeout*1000))
        {
            dati->set_BufResult(tr("Porta %1 aperta\n").arg(curPort));
        }
    }
    dati->set_BufResult(tr("\n *** Scansione completata *** \n"));
}
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2009, 12:37   #27
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Così funziona:

connect(&thread, SIGNAL(started()), this, SLOT(showMaximized()));
connect(&thread, SIGNAL(finished()), this, SLOT(showNormal()));
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2009, 13:44   #28
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Nel senso che devo usare il segnale finished()? O intendevi un'altra cosa?

edit:
mi rispondo da solo, Si devo usare finished(). A questo punto dovrebbe funzionare, mi manca da definire qualcosina, ma posso dire di aver fatto qualcosa che abbia una grafica.

Il tuo supporto mi è stato molto d'aiuto.
Ti ringrazio per la continua disponibilità.

adesso studio

Ultima modifica di Teo@Unix : 22-12-2009 alle 13:50.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
Vuoi rivedere una scena specifica di un ...
Windows 11, attenzione: la lista delle C...
Tutti i robot aspirapolvere rimasti ai p...
Robot da 19.000 Pa al prezzo del Black F...
Gaming ultra-fluido a 200 Hz a 80€: ques...
Prime Video sotto accusa: doppiaggi anim...
Rivoluzione Linux fra i gamer: nuovo rec...
OnePlus 15R: in attesa dell'arrivo in It...
BIOS schede madri AMD: AGESA 1.2.8.0 in ...
Questa Smart TV LG 65'' QNED 2025 è un b...
PC Desktop con RTX 4060 a un prezzo supe...
Il nuovo iPhone 17e arriverà a in...
POCO anticipa l'arrivo di un nuovo smart...
Ecco la lista delle migliori 32 offerte ...
Intel cambia strategia: cancellato lo sp...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:55.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v