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
    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 

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

    hsm13 (9th November 2011)

  3. #2
    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.

  4. #3
    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.

  5. #4
    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

  6. #5
    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.

  7. #6
    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

  8. #7
    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?

  9. #8
    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

  10. #9
    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

    You can only attach the delegate to the mapper as a whole so it will affect all the columns and you need to write the delegate to discriminate between columns accordingly. The related columns should be handed off to the superclass to get default combo box treatment. Something like:
    Qt Code:
    1. class MyDelegate: public QSqlRelationalDelegate {
    2. Q_OBJECT
    3. public:
    4. MyDelegate(QObject *p = 0): QSqlRelationalDelegate(p) { }
    5. void setEditorData(QWidget *editor, const QModelIndex &index) const
    6. {
    7. switch(index.column()) {
    8. case 0: // do nothing special, simple editors
    9. case 1:
    10. QSqlRelationalDelegate::setEditorData(editor, index);
    11. break;
    12. case 2: // do something special for blob column 2
    13. {
    14. QLabel *label = qobject_cast<QLabel*>(editor);
    15. Q_ASSERT(label);
    16. // blob loading code
    17. break;
    18. }
    19. case 3: // the related column gets default treatment
    20. default:
    21. QSqlRelationalDelegate::setEditorData(editor, index);
    22. }
    23. }
    24. void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
    25. {
    26. switch(index.column()) {
    27. case 0: // do nothing special for column 0, 1
    28. case 1:
    29. QSqlRelationalDelegate::setEditorData(editor, index);
    30. break;
    31. case 2: // do something special for blob column 2
    32. {
    33. QLabel *label = qobject_cast<QLabel*>(editor);
    34. Q_ASSERT(label);
    35. // blob saving code
    36. break;
    37. }
    38. case 3: // the related column gets default treatment
    39. default: // so does anything we've missed
    40. QSqlRelationalDelegate::setEditorData(editor, index);
    41. }
    42. }
    43.  
    44. };
    To copy to clipboard, switch view to plain text mode 

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

    Default Re: Insert and read Image in QLable using QDataWidgetMapper

    Hello ChrisW67,
    thanks a lot for your help. I've tried something like your code, and I've create my Delegate from your code, but, It seems don't work.
    this is my code:
    Qt Code:
    1. class PicLoadDelegate: public QSqlRelationalDelegate
    2. {
    3. Q_OBJECT
    4.  
    5. public:
    6. PicLoadDelegate(QObject * parent = 0 ): QSqlRelationalDelegate(parent) { }
    7. void setEditorData(QWidget *editor, const QModelIndex &index) const
    8. {
    9. switch(index.column()) {
    10. case 9: // do something special for blob column 2
    11. {
    12. QLabel *label = qobject_cast<QLabel*>(editor);
    13. Q_ASSERT(label);
    14. if (label) {
    15. QByteArray imageData = index.data(Qt::EditRole).toByteArray();
    16. QPixmap pixmap;
    17. if (pixmap.loadFromData(imageData))
    18. label->setPixmap(pixmap);
    19. }
    20. break;
    21. }
    22. default:
    23. QSqlRelationalDelegate::setEditorData(editor, index);
    24. }
    25. }
    26. void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
    27. {
    28. switch(index.column()) {
    29. case 9: // do something special for blob column 2
    30. {
    31. QLabel *label = qobject_cast<QLabel*>(editor);
    32. Q_ASSERT(label);
    33. if (label) {
    34. QBuffer buf;
    35. buf.open(QIODevice::WriteOnly);
    36. if (label->pixmap()->save(&buf))
    37. model->setData(index, buf.data(), Qt::EditRole);
    38. }
    39. break;
    40. }
    41. default: // so does anything we've missed
    42. QSqlRelationalDelegate::setEditorData(editor, index);
    43. }
    44. }
    45. };
    To copy to clipboard, switch view to plain text mode 

    What do you think is the mistake?

    Thanks a lot for your time

    Michele

  12. #11
    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

    Which bit doesn't work? Doesn't compile? Doesn't update the QLabel mapped to column 9 (that's the tenth column)? Doesn't save a label image? Have you single stepped it? Is there valid data in the tenth column of the model?

Similar Threads

  1. Replies: 6
    Last Post: 17th July 2011, 02:06
  2. Insert/Delete points over image
    By sergio87 in forum Qt Programming
    Replies: 3
    Last Post: 18th May 2011, 07:37
  3. Replies: 2
    Last Post: 18th October 2010, 14:33
  4. How to insert an image through Qt
    By thanisha in forum Newbie
    Replies: 1
    Last Post: 26th June 2010, 05:55
  5. Insert image in RTL QTextEdit problem!
    By SudaNix in forum Newbie
    Replies: 2
    Last Post: 23rd October 2009, 22: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
  •  
Qt is a trademark of The Qt Company.