item view drag delay



  • Hallo zusammen,

    bin schon eine Weile am Suchen.

    Gibt es eine Möglichkeit dem DragEvent bei einer ItemView (in meinem Fall QTreeView) ein Delay für den Drag hinzuzufügen.

    Den Benutzern (und auch mir selbst) passiert es oft, dass Items unabsichtig kopiert werden, weil man zu schnell am Klicken ist.
    Wenn einem das nicht direkt auffällt ist man schon etwas am Suchen.

    QApplication::setStartDragTime(2000)
    

    scheint ignoriert zu werden.



  • *bump*

    Habe noch etwas gegoogelt und bin noch immer zu keinem Ergebnis gekommen.

    Wenns da keine einfache Lösung gibt werde ich wohl die Dragevents ueberschreiben muessen und mir was basteln 😕



  • Hmm du sagst es wird ignoriert, hast du schon mal startDragTime() aufgerufen um zu sehen ob dein Wert überhaupt angenommen wird ( sprich die 2000 )

    edit : Code wäre vielleicht nicht schlecht wenn möglich



  • Habe es mir mal ausgeben lassen.

    Der Wert wird richtig ausgegeben.

    Mit

    QApplication::setStartDragDistance( 60);
    

    wird die dragDistance wirklich auf 60 gesetzt.

    Habe das Gefuehl, dass die QTreeView nur die Distance beachtet.

    An Events habe ich nur keyPressEvent und contextMenuEvent ueberschrieben, kein clickEvent, mit dem ich an dieser Stelle was kaputt machen koennte.

    Werde mir mal ein Beispiel erstellen, bei dem eine einfache view benutzt wird. Wie gesagt, bin mir nicht sicher ob diese startDragTime fuer Views gilt



  • So mit dem SimpleTreeItem (Qt 4.7.3 example) funktioniert es auch nicht.

    folgend die main. Model soweit angepasst, dass es die noetigen Flags besitzt und so tut als wuerde es D&D unterstuetzen (wenn ich die Maus beim Klick bewege, wird der Drag simuliert )

    int main(int argc, char *argv[])
    {
        Q_INIT_RESOURCE(simpletreemodel);
    
        QApplication app(argc, argv);
    
        QFile file(":/default.txt");
        file.open(QIODevice::ReadOnly);
        TreeModel model(file.readAll());
        file.close();
    
        QApplication::setStartDragTime(1000);
        QTreeView view;
        view.setDragEnabled( true );
        view.setAcceptDrops( true );
        view.setDropIndicatorShown( true );
        view.setDragDropMode(QAbstractItemView::DragDrop);
    
        view.setModel(&model);
        view.setWindowTitle(QObject::tr("Simple Tree Model"));
        view.show();
        return app.exec();
    }
    

Anmelden zum Antworten