Global shortcuts



  • Ρε παιδιά υπάρχει περίπτωση να βάλουνε Global shortcuts;

    https://bugreports.qt-project.org/browse/QTBUG-5183

    Εσείς χρειάζεστε Global shortcuts;



  • Και βέβαια τα χρειαζόμαστε...

    Αν το ψάξεις γίνεται με 3rd party Qt library, αλλά βρήκα (για linux τουλάχιστον) τρόπο να το κάνω με libkeybinder.



  • Έχεις κανα παράδειγμα qt με libkeybinder;

    Δημιουργώ χρησιμοποιώντας linux mint 14, τελευταία έκδοση qt και qt creator



  • Τσέκαρε τον κώδικα του Wallch που φτιάχνω με ένα φίλο αυτή τη στιγμή

    https://code.launchpad.net/~wallch/wallpaper-changer/trunk

    Τον παίρνεις είτε με
    @bzr branch lp:wallpaper-changer@
    είτε από το tarball:
    http://bazaar.launchpad.net/~wallch/wallpaper-changer/trunk/tarball/78

    Ψάξε για "keybinder" μέσα στον κώδικα και θα βρεις πώς χρησιμοποιείται. Κυρίως στα αρχεία mainwindow/preferences.cpp

    Αλλά θα βρεις και στο web παραδείγματα, σίγουρα.



  • Οκ, σε ευχαριστώ αδερφέ....



  • Anytime!

    Αν δεν το βρεις πες μου να σου γράψω εδώ ολοκληρωμένο παράδειγμα χρήσης του.



  • το preferences.php κάνει include to keybinder.h στη γραμμ 29, αλλά δεν υπάρχει τέτοιο αρχείο, δεν μου το βρίσκει...

    Ποια έκδοση του libkeybinder χρησιμοποιείς;
    Εγκατέστησα το libkeybinder-3.0-0

    Αν μπορείς να γράψεις ένα απλό παράδειγμα χρήσης του, θα σου είμαι υπόχρεος...



  • Όταν χρησιμοποιείς 3rd party βιβλιοθήκες στα linux να κάνεις τα εξής:

    1. Κατεβάζεις και εγκαθιστάς το -dev πακέτο (εδώ libkeybinder-dev)
    2. Βάζεις την dependency στο .pro αρχείο σου, μέσω του PKGCONFIG (π.χ.

    CONFIG += link_pkgconfig
    PKGCONFIG += keybinder

    όπου (εγώ τουλάχιστον) για να βρω τι θέλει το pkgconfig για να κάνει το linking (εδώ θέλει τη λέξη keybinder) τρέχω σε κονσόλα

    @pkgconfig --list-all | grep "something"@

    Για παράδειγμα:

    @alex@MaD-pc:~$ pkg-config --list-all | grep "keybinder"
    keybinder keybinder - Register global keyboard shortcuts@

    Αυτό είναι σημαντικό βήμα γιατί θα μπορούσε να ήταν keybinder-1.0 ή libkeybinder και δεν μπορείς να ξέρεις ακριβώς από πριν.
    )

    Τώρα, έχοντας κάνει τα 2 πάνω βήματα, στον κώδικά σου αρκεί να κάνεις τα εξής:

    @#include "keybinder.h"

    ...

    keybinder_init();
    //ΓΙΑ ΝΑ ΚΑΝΕΙΣ BIND ΕΝΑ SHORTCUT
    keybinder_bind(SOME_SHORTCUT.toLocal8Bit().data(), handler, NULL)
    //ΓΙΑ ΝΑ ΤΟ ΒΓΑΛΕΙΣ ΜΕΤΑ
    keybinder_unbind(SOME_SHORTCUT.toLocal8Bit().data(), handler);
    //όπου handler μπορεί να είναι μια κενή συνάρτηση του τύπου
    void handler (const char *, void *)
    {
    }@

    Το SOME_SHORTCUT είναι QString. Το θέμα που προέκυψε σε μένα ήταν το τι τιμές μπορεί να πάρει έτσι ώστε να το αναγνωρίσει o keybinder. Δηλ. αν του δώσεις σαν QString το "DEN KSERW TI MOU GINETAI" δεν νομίζω να μπορέσει να κάνει bind το shortcut, ενώ συγκεκριμένα πράγματα, όπως το "<Alt><Shift>G" δουλεύουν (άλλο παράδειγμα string που θα δούλευε εδώ: "εδώ":http://i.imgur.com/dOvWW6n.png )

    Ο handler είναι η συνάρτηση που τρέχει όταν καλεστεί το αντίστοιχο shortcut. Δεν πρέπει να είναι μέλος κάποιας κλάσης. Αν χρειάζεσαι access από κει κάποια άλλη συνάρτηση κάποιας κλάσης, κάνε file-global pointer της κλάσης και κάλεσε από αυτόν τον pointer ότι χρειάζεσαι. Αυτό έχουμε κάνει στο mainwindow.cpp με τη συνάρτηση nextKeySignal.

    Εδώ έχω μια λίστα με την αντιστοιχία του τρόπου που ο Qt βλέπει τα κουμπιά με τον τρόπο που ο keybinder τα βλέπει (τον κώδικα τον πήρα από το preferences.cpp):

    http://tny.cz/ceae3218



  • Πωωω ρε φίλε, είσαι άρχοντας....



  • Έκανα update την απάντησή μου για να εξηγήσω τον handler.


Log in to reply
 

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