[Interest] Starting drag operation from slot.

Igor Mironchik igor.mironchik at gmail.com
Fri Feb 12 14:10:14 CET 2016


Hi,

Next code works... :)

{
     const QString fileName =
         QFileDialog::getOpenFileName( this, tr( "Select Image" ),
             QStandardPaths::standardLocations(
                 QStandardPaths::PicturesLocation ).first(),
             tr( "Image Files (*.png *.jpg *.jpeg *.bmp)" ), 0,
             QFileDialog::DontUseNativeDialog );

     QApplication::processEvents();

     if( !fileName.isEmpty() )
     {
         QImage image( fileName );

         if( !image.isNull() )
         {
             QDrag * drag = new QDrag( this );
             QMimeData * mimeData = new QMimeData;

             QPixmap p;
             QSize s = image.size();

             if( s.width() > 50 || s.height() > 50 )
             {
                 s = s.boundedTo( QSize( 50, 50 ) );
                 p = QPixmap::fromImage(
                     image.scaled( s, Qt::KeepAspectRatio, 
Qt::SmoothTransformation ) );
             }
             else
                 p = QPixmap::fromImage( image );

             mimeData->setImageData( image );
             drag->setMimeData( mimeData );
             drag->setPixmap( p );

             QApplication::processEvents();

             drag->exec();
         }
         else
             QMessageBox::warning( this, tr( "Wrong Image..." ),
                 tr( "Failed to load image from \"%1\"." ).arg( fileName 
) );
     }
}

On 12.02.2016 15:25, Igor Mironchik wrote:
> Hi folks,
>
> I need to start drag operation in slot connected to QAction::triggered().
>
> Below is what I do in the slot.
>
> {
>     const QString fileName =
>         QFileDialog::getOpenFileName( this, tr( "Select Image" ),
>             QStandardPaths::standardLocations(
>                 QStandardPaths::PicturesLocation ).first(),
>             tr( "Image Files (*.png *.jpg *.jpeg *.bmp)" ) );
>
>     if( !fileName.isEmpty() )
>     {
>         QImage image( fileName );
>
>         if( !image.isNull() )
>         {
>             QDrag * drag = new QDrag( this );
>             QMimeData * mimeData = new QMimeData;
>
>             QPixmap p;
>             QSize s = image.size();
>
>             if( s.width() > 50 || s.height() > 50 )
>             {
>                 s = s.boundedTo( QSize( 50, 50 ) );
>                 p = QPixmap::fromImage(
>                     image.scaled( s, Qt::KeepAspectRatio, 
> Qt::SmoothTransformation ) );
>             }
>             else
>                 p = QPixmap::fromImage( image );
>
>             mimeData->setImageData( image );
>             drag->setMimeData( mimeData );
>             drag->setPixmap( p );
>
>             QApplication::processEvents();
>
>             QMouseEvent event( QEvent::MouseButtonPress,
>                 QPointF( -10.0, -10.0 ), Qt::LeftButton, 0, 0 );
>
>             QApplication::sendEvent( this, &event );
>
>             drag->exec();
>         }
>         else
>             QMessageBox::warning( this, tr( "Wrong Image..." ),
>                 tr( "Failed to load image from \"%1\"." ).arg( 
> fileName ) );
>     }
> }
>
> This works if I choose image and press button OK in file dialog.
>
> But if I double-click on the file name in file dialog then drag 
> appears and immediately disappear...
>
> How to fix it?
>
> Any ideas, please.
>
> Thank you.




More information about the Interest mailing list