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. How to connect events from QAbstractItemDelegate widget?

How to connect events from QAbstractItemDelegate widget?

Scheduled Pinned Locked Moved General and Desktop
5 Posts 4 Posters 5.0k Views 1 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.
  • P Offline
    P Offline
    pinchoonet
    wrote on last edited by
    #1

    Hi,

    I have a widget containing a QTreeView with a QStyledItemDelegate in column 0 creating a QSpinBox editor.
    I would like to display in a QLabel and in real time the value of the QSpinBox each time it changes (so when QSpinBox::valueChanged(int) signal is emitted, for example when the mouse wheel is used inside the QSpinBox or up/down buttons are clicked).

    Does someone know how to do such a connection between QStyledItemDelegate and the QLabel?

    Thanks in advance for your response.
    Best regards.
    Pascal

    1 Reply Last reply
    0
    • F Offline
      F Offline
      franku
      wrote on last edited by
      #2

      I guess, you could reimplement QStyledItemDelegate, add a slot to your derived class and connect this slot to the label after constructing it.

      This, Jen, is the internet.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        andre
        wrote on last edited by
        #3

        Easiest is to take control of the actual creation of the QSpinBox. For instance, by subclassing QStyledItemDelegate, and reimplementing the createEditor method like this:
        @
        QWidget* MyDelegate::createEditor( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
        {
        //let the base class do the hard work
        QWidget editor = QStyledItemDelegate::createEditor(parent, option, index);

        QSpinBox* spinbox = qobject_cast<QSpinBox*>(editor);
        if (spinbox) {
        connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onSpinboxValueChanged(int)));
        }

        return editor;
        }
        @

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pinchoonet
          wrote on last edited by
          #4

          Dear franku & Andre, thanks for your response.

          To Andre: "spinbox" is NULL using qobject_cast.
          But I finally wrote this code which works:
          @
          QWidget * AngleDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
          {
          QSpinBox *editor = new QSpinBox(parent);
          editor->setMinimum(0);
          editor->setMaximum(359);
          connect(editor, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged(int)));

          return editor;
          

          }
          @

          I resend the "QSpinBox::valueChanged()" signal outside my delegate and can then connect any QObject (like a QLabel) to the "AngleDelegate::valueChanged()" signal.

          Problem solved.
          Thanks again.
          Bye
          Pascal

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mairesse
            wrote on last edited by
            #5

            Hello there, pin..

            I have a similar problem and I can't figure out how to solve the connect thing, maybe you can give me a hand on it.

            I have a QTableView inherited and also a QStyledItemDelegate inherited so I can change them as needed.

            One of the columns has a widget (QSlider) that I paint using drawComplexControl from QStyle and I create the real QSlider to edit when the editor opens. In the other column I store the value of this slider.

            The problem is that I can't figure out how to keep the value updated in real-time, because now I can only update it when setModelData is called.

            I can't figure how to connect the signal valueChanged to a slot of mine that would then update the desired item in the table view (that would be in the same row but another column).

            I don't think any code is relevant because I have the same structure as you with createEditor but here it goes:

            Here I create the slider, the commented line is what would be my connect (but where should I use the slot or signal I'd call/emit?)
            [code]QWidget *HsSubunitConfigurationDelegate::createEditor(QWidget *parent, const StyleOptionViewItem &option, const QModelIndex &index) const{
            QSlider slider = new QSlider(Qt::Horizontal, parent);
            /
            connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int))); */
            slider->setAutoFillBackground(true);
            return slider;
            }[/code]

            Here I set the data for both the item that hold the widget (I can't get from the value column I want to update because I decode the value in a string later on and I don't feel like decoding it back to a value) and then I set the value to the column I want to be updated in real-time:
            [code]void HsSubunitConfigurationDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
            QSlider slider = qobject_cast<QSlider>(editor);
            model->setData(index, slider->value(), Qt::UserRole+12);
            model->setData(model->index(index.row(), 3), slider->value(), Qt::DisplayRole);
            }
            [/code]

            Sorry if I forgot to post any code or if I wasn't clear.. if you don't understand my problem I can try to ask it again in other words. Also sorry for any misspelling.

            Thanks in advance.

            1 Reply Last reply
            0

            • Login

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