Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    155

    [Qt - C++] Signal da children widget di un QStackedWidget

    Ho un QStackedWidget popolato da n MyWidget (intendendo con MyWidget che sono derivati da QWidget).
    Mi servirebbe 'raccogliere' il signal emesso dal widget corrente del QStackedWidget, ma non riesco a capire come fare.
    Il mio tentativo e' stato

    codice:
    connect(mStackedWidget->currentWidget(),SIGNAL(mysignal()),this,SLOT(mySlot()))
    ma come temevo non funziona.

    Se puo' essere utile, lo stackedwidget viene popolato da n elementi al momento della costruzione dell'oggetto principale, e il numero non e' noto a priori, ma tramite un parametro passato al costruttore stesso dell'oggeto parent che 'contiene' lo stackedwidget.
    Tutti i widget children del qstackedwidget, derivano da una classe astratta derivata da QWidget, e mysignal e' stato definito all'interno di questa classe astratta.

    Non ricevo alcun errore durante la fase di compilazione, ne messaggi di errore del tipo che QObject non trova il signal o lo slot, la macro Q_OBJECT e' stata messa in tutte le classi, in giro non riesco a trovare niente che mi dia una mano.

    Ho provato a derivare QStackedWidget, ma non riesco a capire come indicare di connettere tutti i widget children...

    Spero di essermi spiegato in modo abbastanza chiaro.

    Grazie

  2. #2
    Ciao, per core relative a Qt ti consiglio il loro forum ufficiale.
    Relativamente a quanto da te chiesto secondo me dovresti implementare un even filter dentro ai widget e filtrare l'evento focus.

  3. #3
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    155
    Grazie denis76 per l'interessamento.
    Mentre davo un occhio a quanto da te consigliato, mi e' venuto in mente quanto segue, che pare funzionare nel senso che non ricevo alcun messaggio durante la compilazione ed effettivamente ottengo cio' che voglio.

    Faccio un breve riepilogo.

    La mia situazione e' aver creato una classe che chiamo AbstractWidget (ho dei metodi astratti in questa classe) derivata 'public' da QWidget.
    Da AbstractWidget derivo sempre 'public' Una piccola serie di Widget, che chiamo Widget1, Widget2, Widget3, ecc.
    Questi Widget_i emettono il signal miosegnale.
    Ho poi creato un'altra classe, che chiamo MyWidget, derivata sempre 'public' da QWidget, che tra le altre cose, ha come child un QStackedWidget che viene popolato dai Widget_i col costruttore di MyWidget.

    Quando uno dei Widget_i emette il signal miosegnale, MyWidget deve far partire lo slot myslot

    Ho quindi pensato, che una volta creati tutti gli oggetti, posso far scorrere tutti i child del QStackedWidget, ad esempio mediante ciclo for, e fare effettivamente connect, sotto uno stalcio di pseudocodice

    codice:
    MyWidget::MyWidget(/*parametri necessari*/)
    {
      //quello che serve
      //...
      //in base ai parametri passati
      //popolo mStackedWidget->insertWidget(/*...*/);
      //a questo punto posso far scorrere tutti i child di mStackedWidget e fare, ad esempio mediante un ciclo for
      //connect(static_cast<MyWidget*>(mStackedWidget->widget(i)),SIGNAL(miosegnale),this,SLOT(myslot));
    //eventuali altre cose
    }
    Spero che funzioni perche' sia veramente corretto e non per una serie fortuita di coincidenze, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.