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

[C++, QTimer] Dostęp do danych z poziomu slotu

Ostatnio zmodyfikowano 2013-09-04 20:16
Autor Wiadomość
look997
Temat założony przez niniejszego użytkownika
[C++, QTimer] Dostęp do danych z poziomu slotu
» 2013-09-04 03:59:12
Chcę w QTimer przekazać argument do slota.
Z tego co wyczytałem to jest niemożliwe, jednak chciałbym aby funkcja slot wiedziała kto się do niej odnosi i na podstawie tego, jaką opcję z instrukcji warunkowej wewnątrz tej funkcji ma wybrać.
Jeśli nie chcecie podać konkretnego rozwiązania to chociaż powiedzcie czy w C++ istnieje coś w rodzaju event.target z JavaScriptu lub jakiś inny sposób na osiągnięcie tego celu.
P-91510
DejaVu
» 2013-09-04 10:57:40
http://www.qtcentre.org​/threads​/32779-Connected-QTimer-slot-not-being-called
Może o to Ci chodzi?
C/C++
class MyObj
    : public QObject
{
    Q_OBJECT
   
public:
    MyObj() { }
    ~MyObj() { }
   
    bool Initialize()
    {
        pTimer = new QTimer( this );
        connect( pTimer, SIGNAL( timeout() ), this, SLOT( MySlot() ) );
        pTimer->start( 1000 );
    }
   
private slots:
    void MySlot()
    {
        //Stuff
    }
   
private:
    QTimer * pTimer;
};
P-91514
look997
Temat założony przez niniejszego użytkownika
» 2013-09-04 15:41:09
Takie coś:
C/C++
int ddd = 1;
ShotTimer->singleShot( 9000, this, SLOT( mielenie( ddd ) ) );

Mam 3 opcje i chcę poinformować funkcję mielenie(), którą opcję wybrałem. Jak jest jakiś inny sposób bez użycia zmiennej to proszę podać.


Na marginesie: Dałem takie jak najbardziej ogólne pytanie bo jak bym zapytał konkretnie o zmienne a rozwiązanie byłoby bez ich wykorzystania to już byłby więcej niż jeden temat i pewnie b ktoś temat usunął bo jeden temat jeden post.
P-91526
DejaVu
» 2013-09-04 16:44:09
jeden temat = jeden problem, a nie jeden temat = jeden post. Tematy nie mają być ogólne bo w IT rozwiązuje się konkretne problemy, a nie problemy niezdefiniowane.

Dodaj do klasy MyObj zmienną:
C/C++
int & m_ddd;
//...
MyObj( int & ddd )
    : m_ddd( ddd )
{ }
metoda MySlot nie jest statyczna, więc widzi wszystkie dane obiektu, a tym samym będziesz miał również dostep do zmiennej
m_ddd
.
P-91531
look997
Temat założony przez niniejszego użytkownika
» 2013-09-04 17:12:37
Tyle, że u mnie jest tak:
C/C++
void OknaKlasa::mielenie( int ddd ) {
   
    liczMiel += 1;
    if( liczMiel == licz ) {
       
        if( ddd == 0 ) {
            kontrolZ->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" );
        } else if( ddd == 1 ) {
            kontrolJ->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" );
           
        } else {
            kontrolD->setStyleSheet( "background-color: rgb(120,20,100); font-size:8px; color: black;" );
        }
    }
}


void OknaKlasa::Shot( int ddd ) {
    licz += 1;
   
    ShotTimer->singleShot( 9000, this, SLOT( mielenie( ddd ) ) ); // wiem że tak nie można ale efekt ma być tak jakby działało
   
    kontrol->setStyleSheet( "background-color: rgb(120,120,200); font-size:8px; color: black;" );
   
    // ...
}


void OknaKlasa::Shot() {
    licz += 1;
    ShotTimer->singleShot( 9000, this, SLOT( mielenie() ) );
   
    kontrol->setStyleSheet( "background-color: rgb(120,120,200); font-size:8px; color: black;" );
}

OknaKlasa::OknaKlasa( QWidget * parent )
    : QMainWindow( parent )
    , //, Qt::WindowStaysOnTopHint ui( new Ui::OknaKlasa )
{
    ui->setupUi( this );
   
    // ...
   
    Shot( Zero );
    Shot( Jeden );
    Shot( Dwa );
   
   
    // ...
}

Jeśli da się inaczej lub prościej określić której opcji dotyczy wybór to proszę podać.
Może całość jest niepotrzebnie utrudniona przez moją niewiedzę?
P-91535
DejaVu
» 2013-09-04 20:07:33
Dostałeś już rozwiązanie. Skoro nie da się przekazać do 'slota' argumentu to dlaczego to robisz?
P-91546
look997
Temat założony przez niniejszego użytkownika
» 2013-09-04 20:16:49
Tylko tak napisałem żeby było wiadomo jaki mam cel.
P-91548
« 1 »
  Strona 1 z 1