I have a solution using an event filter shown below.
One would think that one would be able to intercept an event of type QEvent;;Drop heading for the TreeViews but I was unable to detect one. Strange...Unless it is the MetaCall event it receives just after the drop. Since I could not make use of the information in the meta call event I can't know if it was the Drop event or not.
At anyrate, the QEvent::ChildRemoved event type proved to work just as well. Perhaps even better since I should only get that when the model/view accepts the drop and I don't have to put in lots of ugly code to send the event and check its return to see if the drop was accepted or not.
Enjoy...
-Mic
#include <QtGui>
{
Q_OBJECT
public:
{
model->setReadOnly( false );
tree->setModel( model );
tree
->setRootIndex
( model
->index
( QString( "/home/randy" ) ) );
model1->setReadOnly( false );
righttree->setModel( model1 );
righttree
->setRootIndex
( model1
->index
( QString( "/tmp" ) ) );
tree->setDragEnabled( true );
tree->setAcceptDrops( true );
tree->setDropIndicatorShown( true );
tree->setDragDropOverwriteMode( false );
tree->installEventFilter( this );
righttree->setDragEnabled( true );
righttree->setAcceptDrops( true );
righttree->setDropIndicatorShown( true );
righttree->setDragDropOverwriteMode( false );
righttree->installEventFilter( this );
splitter->addWidget( tree );
splitter->addWidget( righttree );
setCentralWidget( splitter );
}
{
if( target
== tree
&& event
->type
() == QEvent::ChildRemoved ) { model->refresh( tree->rootIndex() );
}
else if( target
== righttree
&& event
->type
() == QEvent::ChildRemoved ) { model1->refresh( righttree->rootIndex() );
}
return false;
}
private:
};
int main( int argc, char *argv[] )
{
// a "file manager" at simplest :)
MainWindow window;
window.show();
return a.exec( );
}
#include "app.moc"
#include <QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow( QWidget *parent = 0 ) : QMainWindow( parent)
{
splitter = new QSplitter( this );
model = new QDirModel( this );
model->setReadOnly( false );
tree = new QTreeView;
tree->setModel( model );
tree->setRootIndex( model->index( QString( "/home/randy" ) ) );
model1 = new QDirModel( this );
model1->setReadOnly( false );
righttree = new QTreeView;
righttree->setModel( model1 );
righttree->setRootIndex( model1->index( QString( "/tmp" ) ) );
tree->setDragEnabled( true );
tree->setAcceptDrops( true );
tree->setDropIndicatorShown( true );
tree->setDragDropOverwriteMode( false );
tree->installEventFilter( this );
righttree->setDragEnabled( true );
righttree->setAcceptDrops( true );
righttree->setDropIndicatorShown( true );
righttree->setDragDropOverwriteMode( false );
righttree->installEventFilter( this );
splitter->addWidget( tree );
splitter->addWidget( righttree );
setCentralWidget( splitter );
}
bool eventFilter( QObject *target, QEvent *event )
{
if( target == tree && event->type() == QEvent::ChildRemoved ) {
model->refresh( tree->rootIndex() );
}
else if( target == righttree && event->type() == QEvent::ChildRemoved ) {
model1->refresh( righttree->rootIndex() );
}
return false;
}
private:
QSplitter *splitter;
QDirModel *model;
QTreeView *tree;
QDirModel *model1;
QTreeView *righttree;
QTimer *timer;
};
int main( int argc, char *argv[] )
{
// a "file manager" at simplest :)
QApplication a( argc, argv );
MainWindow window;
window.show();
return a.exec( );
}
#include "app.moc"
To copy to clipboard, switch view to plain text mode
Bookmarks