come impostare il Focus in due oggetti distinti contemporaneamente



  • Salve a tutti.

    premetto di non essere un grande esperto di Qt e di programmazion e

    avrei la necessità di muovere 2 oggetti distinti nella mia scena usando comandi da tastiera, per poter dare dei comandi da tastiera ad un dato oggetto devo prima impostare il Flag e il Focus su tale oggetto, purtroppo però Qt mi permette di mettere sotto Focus un singolo oggetto alla volta e quindi al momento mi trovo a poter dare i comandi da tastiera ad un singolo oggetto alla volta.
    Esiste un modo per poter impostare 2 o più oggetti sotto Focus in modo da potergli inviare comandi da tastiera contemporanemente?



  • Ciao Lorenzo...
    Domanda: in quanto non riesco bene a capire cosa intendi per scena... ti riferisci ad QGraphicsScene e i suoi item?
    oppure a un altra classe?
    10 anni fa ho scritto Miniscribus... un programma che vuole fare simili cose come il grande Scribus.. https://www.scribus.net/ non capivo mai .. neanche oggi perhè scribus non legge anche i file Apache™ FOP (Formatting Objects Processor) cosi in 2-3 mesi ho scritto il piccolo Miniscribus...
    https://sourceforge.net/projects/wysiwyg-edit/ e quello è pieno di
    QGraphicsScene permettendo di lavorare con Layer che si possono girare in qualsiasi gradi... in poche parole le classi derivanti da QObject si possono sempre eseguire come static c++ .. e senza perdere le loro proprieta dei segnali slot... con i quali puoi inviare segnali prendere e ricevere da classi che non necessariamente sono child ....se fosse quello il problema pubblico un po di template di esempio da capire meglio come funzionano....
    Saluti dalla svizzera italiana...



  • Ciao patrik08
    si forse non sono stato precisissimo, comunque mi riferisco alla QGraphicsScene e a 2 item che ho deciso di aggiungere.. il problema sta nel fatto che sono riuscito a creare un modo per muovere i due item in tutte le direzioni che voglio solo che per problemi di setFocus o setFlag non riesco a farli muovere contemporaneamente! devo ogni volta che voglio muovere un item piùttosto che un altro cliccare con il mouse sopra l'item che voglio muovere e solo a quel punto inviare i comandi da tastiera!...

    spero di essere stato abbastanza chiaro, purtroppo sono solo alle prime armi con Qt e con il c++ in generale

    Saluti da Reggio Emilia



  • La parola magica si chiama zValue:
    nei documenti html e xsl-fo sarebbe il z-index..
    piu questo numero è alto il singolo elemento è visibile...
    muovendo in drag & drop con il tasto CTRL premuto...
    vedi in:
    https://github.com/pehohlva/fop-miniscribus/tree/master/fop_miniscribus.2.0.0
    esempio x mac e window.. cercando si trova anche un pacchetto gentoo linux... 10 anni or sono che ho scritto quel coso.. il codice è rozzo ma funziona.
    https://sourceforge.net/projects/wysiwyg-edit/

    /* filter only item a top Zindex /  zValue */
    bool GraphicsScene::WakeUp( const QPointF incomming ) 
    {
           QList<QGraphicsItem *>  listing = QGraphicsScene::items(incomming);
           qreal thebest = 0;  /* zindex on front */
           for (int o=0;o<listing.size();o++) {
               listing[o]->setSelected(false); 
               listing[o]->setFlag(QGraphicsItem::ItemIsSelectable,false);
               thebest = qMax(listing[o]->zValue(),thebest);
           }
           /* activate item at top z-index zValue  /  not the down not visible!!!! */
           for (int e=0;e<listing.size();e++) {
               if (listing[e]->zValue() == thebest) {
                 listing[e]->setFlag(QGraphicsItem::ItemIsSelectable,true);
                 emit SelectOn(listing[e],thebest);
                 return true;
               }
           }
    return false;
    }
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.