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; }
3/4