Results 1 to 17 of 17

Thread: Insert and read Image in QLable using QDataWidgetMapper

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Nov 2011
    Posts
    5
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Insert and read Image in QLable using QDataWidgetMapper

    I have simple master detail application using QDataWidgetMapper in master table; I added a blob in database and QLable to show the picture and button to select a picture

    The button code

    Qt Code:
    1. QString pix = QFileDialog::getOpenFileName(
    2. this, tr("Open file"), "/MyDocument/", tr("PNG Images (*.jpg)") );
    3.  
    4. QImage image(pix);
    5. ui->pix_label->setPixmap(QPixmap::fromImage(image));
    To copy to clipboard, switch view to plain text mode 

    and the classic mapper code

    Qt Code:
    1. mapper = new QDataWidgetMapper(this);
    2. mapper->setModel(model);
    3. mapper->setItemDelegate(new QSqlRelationalDelegate(this));
    4. mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
    5. mapper->addMapping(ui->id,model->fieldIndex("id"));
    6. mapper->addMapping(ui->fName,model->fieldIndex("fName"));
    7. mapper->addMapping(ui->lName,model->fieldIndex("lName"));
    To copy to clipboard, switch view to plain text mode 

    Now, I tried to add this line but couldn't navigate pictures

    Qt Code:
    1. mapper->addMapping(ui->picture_label,model->fieldIndex("picture"));
    To copy to clipboard, switch view to plain text mode 


    I need help to make that works, I'm a just beginner, so a detailed code is appreciated. Thanks in advance

  2. #2
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    The QLabel does not have a property that set/returns its icon as a QByteArray. You need the image data as a QByteArray in order to insert/retrieve it from the blob database field. You will probably need to implement a QItemDelegate to handle the transfer of data to and from this widget. You would need to provide the QItemDelegate::setEditorData() and QItemDelegate::setModelData() functions and attach an instance of the delegate to your widget mapper.

    You should also look at QPixmap::loadFromData(), QPixmap::save(), and QBuffer for manipulating the image data.

  3. #3
    Join Date
    Nov 2011
    Posts
    5
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Hum, it looks I need a lot. Is there a sample code ? Why it is so complicated in Qt ? And why there is no reference describe that case ?! I'm sorry

  4. #4
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Not really a lot. Something like this (compiles but untested):
    Qt Code:
    1. class PicLoadingDelegate: public QItemDelegate
    2. {
    3. Q_OBJECT
    4. public:
    5. PicLoadingDelegate(QObject * parent = 0 ): QItemDelegate(parent) { }
    6.  
    7. void setEditorData( QWidget *editor, const QModelIndex &index ) const
    8. {
    9. QLabel *label = qobject_cast<QLabel *>(editor);
    10. if (label) {
    11. QByteArray imageData = index.data(Qt::EditRole).toByteArray();
    12. QPixmap pixmap;
    13. if (pixmap.loadFromData(imageData))
    14. label->setPixmap(pixmap);
    15. }
    16. }
    17.  
    18. void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
    19. {
    20. QLabel *label = qobject_cast<QLabel *>(editor);
    21. if (label) {
    22. QBuffer buf;
    23. buf.open(QIODevice::WriteOnly);
    24. if (label->pixmap()->save(&buf))
    25. model->setData(index, buf.data(), Qt::EditRole);
    26. }
    27. }
    28. };
    To copy to clipboard, switch view to plain text mode 

  5. The following user says thank you to ChrisW67 for this useful post:

    hsm13 (9th November 2011)

  6. #5
    Join Date
    Nov 2011
    Posts
    5
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Thumbs up Re: Insert and read Image in QLable using QDataWidgetMapper

    wow that's great; Thank you so much.
    Is PDF file is different than image ? and can I display it in hyperlink label to open it with outside application ? Many thanks again.

  7. #6
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Quote Originally Posted by hsm13 View Post
    Is PDF file is different than image ?
    Yes.
    and can I display it in hyperlink label to open it with outside application ?
    Yes.

  8. #7
    Join Date
    Nov 2011
    Posts
    5
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    ummm, sample code if found please

  9. #8
    Join Date
    Nov 2011
    Posts
    5
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Let's take a deep breath; In fact I found you post here

    http://www.qtcentre.org/threads/4499...light=pdf+blob

    It's a bit different; so where I want some tricky help. sorry for any disturb.

  10. #9
    Join Date
    Oct 2009
    Posts
    65
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Good Morning to all,
    I've the same problem, but in a QSqlRelationalModel, so, how I should use this delegate?
    I've got a table with severals column so, now I use a QSqlRelationalDelegate (I've also 3 QCombobox at 3 relations), so how can I switch from one delegate to other? Or I can subclass QSqlRelationalDelegate to obtain this? And your code affect only the QLabel behavior? The other columns will work as before?

    Thanks for your time!

    Michele

  11. #10
    Join Date
    Mar 2009
    Location
    Brisbane, Australia
    Posts
    7,729
    Thanks
    13
    Thanked 1,610 Times in 1,537 Posts
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows
    Wiki edits
    17

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    The delegate code I posted is an example. It assumes that if the editor is a QLabel that the corresponding column in the model is a blob containing an image. It also shows how the current image in the label can be written back to the model. If the editor widget, this was for mapped widgets not a table view, was not a label then no data would be transferred in either direction.

    Delegates are attached to a view, not model or table, either as a whole or to a column/ row of the the view (see QAbstractItemView::setItemDelegate(), setItemDelegateForColumn, setItemDelegateForRow). If you use one delegate for the whole view then your delegate usually needs to differentiate between columns using index.column() and do something different for each in the setEditorData() and setModelData() functions. If you use a delegate on a single column then the example is the sort of thing you need.

    The default relational delegate should look after creating an populating combo box editors for established relationships and do the default for other columns. You can put separate delegates on columns if you wish or write a combined delegate by subclassing the relational delegate.

    What are you trying to achieve?

  12. #11
    Join Date
    Oct 2009
    Posts
    65
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    I'm trying to achive the same effect needed by hsm 13 but I'm using a QSqlRelationalTableModel and QDataWidgetMapper, and I don't know how to use your example.
    If I assign your delegate to the mapper [mapper->setItemDelegate(new PicLoadingDelegate(this));], I lose the link of other fields of my form.
    I use QLabel to show the image stored into Blob file.

    Thanks a lot

    Michele

Similar Threads

  1. Replies: 6
    Last Post: 17th July 2011, 03:06
  2. Insert/Delete points over image
    By sergio87 in forum Qt Programming
    Replies: 3
    Last Post: 18th May 2011, 08:37
  3. Replies: 2
    Last Post: 18th October 2010, 15:33
  4. How to insert an image through Qt
    By thanisha in forum Newbie
    Replies: 1
    Last Post: 26th June 2010, 06:55
  5. Insert image in RTL QTextEdit problem!
    By SudaNix in forum Newbie
    Replies: 2
    Last Post: 23rd October 2009, 23:53

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.