Drag & Drop mit QTextBrowser
Verfasst: 3. Juni 2010 14:59
Ich habe in meiner Versuchs-Anwendung ein QTextBrowser eingefügt und diesen gesubclassed. Ich möchte dem User erlauben via Drag und Drop Dateien in diesen QTextBrowser einzufügen. Diese Aufgabe habe ich bereits eingebaut, zur Vereinfachung des Beispiels wird einfach nur der Name des Drop-Ziels eingefügt in dem QTextBrowser.
Mein Problem ist allerdings, wenn ich probeweise eine Datei in den QTextBrowser droppe, wird zwar der Name eingefügt aber der QTextBrowser ist danach nicht mehr richtig benutzbar, weil der Cursor nicht mehr blinkt und sich auch nicht mehr mit den Pfeiltasten bewegen lässt. Text lässt sich allerdings markieren und auch weiterhin eingeben.
Ich sehe im Moment nicht warum da was schiefläuft, kann jemand helfen?
Qt 4.70 Beta 1 unter Linux.
Hier die gesubclasste Klasse des QTextBrowsers:
mybrowser.h
mybrowser.cpp
Mein Problem ist allerdings, wenn ich probeweise eine Datei in den QTextBrowser droppe, wird zwar der Name eingefügt aber der QTextBrowser ist danach nicht mehr richtig benutzbar, weil der Cursor nicht mehr blinkt und sich auch nicht mehr mit den Pfeiltasten bewegen lässt. Text lässt sich allerdings markieren und auch weiterhin eingeben.
Ich sehe im Moment nicht warum da was schiefläuft, kann jemand helfen?
Qt 4.70 Beta 1 unter Linux.
Hier die gesubclasste Klasse des QTextBrowsers:
mybrowser.h
Code: Alles auswählen
#ifndef MYBROWSER_H
#define MYBROWSER_H
#include <QTextBrowser>
class mybrowser : public QTextBrowser
{
Q_OBJECT
public:
explicit mybrowser(QWidget *parent = 0);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
};
#endif // MYBROWSER_Hmybrowser.cpp
Code: Alles auswählen
#include "mybrowser.h"
#include <QDragEnterEvent>
mybrowser::mybrowser(QWidget *parent) : QTextBrowser(parent){
setAcceptDrops(true);
}
void mybrowser::dragEnterEvent(QDragEnterEvent *event){
if (event->mimeData()->hasFormat("text/uri-list")) event->accept();
else event->ignore();
}
void mybrowser::dropEvent(QDropEvent *event){
QList<QUrl> urls = event->mimeData()->urls();
if (urls.isEmpty()) {
event->ignore();
return;
}
for (int i=0; i<urls.count(); i++){
QString file = urls[i].toLocalFile();
this->append(file);
}
event->accept();
}