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.

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to