Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Aligning Editor to tableView cell
Forum Updated to NodeBB v4.3 + New Features

Aligning Editor to tableView cell

Scheduled Pinned Locked Moved Solved General and Desktop
5 Posts 3 Posters 1.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    gabor53
    wrote on last edited by
    #1

    I have a tableview for reviewing and correcting db data. To change the image stored in the database I created a qpushbutton on top of the tableview cell (as part of a delegate). When you click on the button it opens acqfiledialog.
    The problem is that the qpushbutton is the right size but it is not centered on the tableview cell. How can I center it?
    Thank you.

    1 Reply Last reply
    0
    • yuvaramY Offline
      yuvaramY Offline
      yuvaram
      wrote on last edited by
      #2

      can you provide a sample code

      Yuvaram Aligeti
      Embedded Qt Developer
      : )

      G 1 Reply Last reply
      0
      • yuvaramY yuvaram

        can you provide a sample code

        G Offline
        G Offline
        gabor53
        wrote on last edited by
        #3

        @yuvaram
        Here is the code:

        imagedelegate.cpp:

        #include "imagedelegate.h"
        
        ImageDelegate::ImageDelegate(QObject* parent) : QStyledItemDelegate(parent) {
        
        }
        
        QWidget* ImageDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const {
          Q_UNUSED(option);
          Q_UNUSED(index);
          return new ImagePickButton(parent);
        }
        
        void ImageDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const {
          ImagePickButton* imgPick = qobject_cast<ImagePickButton*>(editor);
          Q_ASSERT(imgPick);
          imgPick->setSelectedFile(index.data(Qt::UserRole).toString());
        }
        
        void ImageDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const {
          ImagePickButton* imgPick = qobject_cast<ImagePickButton*>(editor);
          Q_ASSERT(imgPick);
        
          if(imgPick->selectedFile().isEmpty()) {
            model->setData(index, QVariant(), Qt::UserRole);
            model->setData(index, QVariant(), Qt::DecorationRole);
          } else {
            model->setData(index, imgPick->selectedFile(), Qt::UserRole);
            model->setData(index, QIcon(imgPick->selectedFile()), Qt::DecorationRole);
          }
        }
        
        void ImageDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const {
          Q_UNUSED(index);
          editor->setGeometry(option.rect);
        }
        

        imagepickbutton:

        #include "imagepickbutton.h"
        
        ImagePickButton::ImagePickButton(QWidget* parent) : QWidget(parent) {
          m_mainButton = new QPushButton(tr("Select \n Image"), this);
        
          m_mainButton->setStyleSheet ("font: bold;"
                                       "font-size: 12px;"
                                       "background-color: rgba(255, 255, 255, 100);");
        
        
          m_mainButton->setMaximumWidth(100);
          m_mainButton->setMinimumWidth (100);
          m_mainButton->setMaximumHeight (100);
          m_mainButton->setMinimumHeight (100);
        
          QHBoxLayout* mainLay = new QHBoxLayout(this);
          mainLay->addWidget(m_mainButton);
        
          connect(m_mainButton, &QPushButton::clicked, this, &ImagePickButton::selectImageFile);
        }
        
        const QString& ImagePickButton::selectedFile() const {
          return  m_selectedFile;
        }
        
        void ImagePickButton::setSelectedFile(const QString& val) {
          if(m_selectedFile == val)
            return;
        
          m_selectedFile = val;
        
          if(m_selectedFile.isEmpty()) {
            m_mainButton->setText(tr("Select Image"));
            QFont buttonFont = m_mainButton->font();
            buttonFont.setPointSize(5);
            m_mainButton->setIcon(QIcon());
          } else {
            m_mainButton->setText(QString());
            m_mainButton->setIcon(QIcon(m_selectedFile));
            m_mainButton->setMaximumWidth(100);
            m_mainButton->setMinimumWidth(100);
          }
          emit selectedFileChanged(m_selectedFile);
        }
        
        void ImagePickButton::selectImageFile() {
          const QString newFile = QFileDialog::getOpenFileName(this, tr("Open Image"), QString(), tr("Images (*.png *.xpm *.jpg)"));
        
          if(!newFile.isEmpty())
            setSelectedFile(newFile);
        }
        
        
        
        
        1 Reply Last reply
        0
        • VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by VRonin
          #4

          I think the problem comes the layout in ImagePickButton try

          m_mainButton->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
          QGridLayout* mainLay = new QHBoxLayout(this);
          mainLay->setSpacing(0);
          mainLay->setContentsMargins(0,0,0,0);
          mainLay->addWidget(m_mainButton,1,1);
          mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Preferred,QSizePolicy::Expanding),0,1);
          mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Preferred,QSizePolicy::Expanding),2,1);
          mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Preferred),1,0);
          mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Preferred),1,2);
          

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          G 1 Reply Last reply
          1
          • VRoninV VRonin

            I think the problem comes the layout in ImagePickButton try

            m_mainButton->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
            QGridLayout* mainLay = new QHBoxLayout(this);
            mainLay->setSpacing(0);
            mainLay->setContentsMargins(0,0,0,0);
            mainLay->addWidget(m_mainButton,1,1);
            mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Preferred,QSizePolicy::Expanding),0,1);
            mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Preferred,QSizePolicy::Expanding),2,1);
            mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Preferred),1,0);
            mainLay->addItem(new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Preferred),1,2);
            
            G Offline
            G Offline
            gabor53
            wrote on last edited by
            #5

            @VRonin
            Thank you. This worked with the following changes:

             QGridLayout* mainLay = new QGridLayout(this);
            
            1 Reply Last reply
            1

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved