so, I don't see any problem, make like this 
h-file
class MyComplexEditor
: public QWidget{
Q_OBJECT
public:
{
m_toolButton->setText("...");
setFocusProxy(m_spinBox);
hbl->setMargin(0);
hbl->setSpacing(0);
hbl->addWidget(m_spinBox);
hbl->addWidget(m_toolButton);
}
QSpinBox *spinBox
() const { return m_spinBox;
} QToolButton *toolButton
() const { return m_toolButton;
}
public slots:
void updateSpinBoxValue()
{
const QAction *action
= qobject_cast<QAction
*>
(sender
());
if (!action)
return;
m_spinBox->setValue(action->data().toInt());
}
private:
};
class MyComplexEditor: public QWidget
{
Q_OBJECT
public:
MyComplexEditor(QWidget *parent = 0) : QWidget(parent)
{
m_spinBox = new QSpinBox();
m_toolButton = new QToolButton();
m_toolButton->setText("...");
QHBoxLayout *hbl = new QHBoxLayout(this);
m_spinBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
m_toolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
setFocusProxy(m_spinBox);
hbl->setMargin(0);
hbl->setSpacing(0);
hbl->addWidget(m_spinBox);
hbl->addWidget(m_toolButton);
}
QSpinBox *spinBox() const { return m_spinBox; }
QToolButton *toolButton() const { return m_toolButton; }
public slots:
void updateSpinBoxValue()
{
const QAction *action = qobject_cast<QAction *>(sender());
if (!action)
return;
m_spinBox->setValue(action->data().toInt());
}
private:
QSpinBox *m_spinBox;
QToolButton *m_toolButton;
};
To copy to clipboard, switch view to plain text mode
cpp-file
{
Q_UNUSED(option);
Q_UNUSED(index);
MyComplexEditor *mce = new MyComplexEditor(parent);
for (int i = 0; i < 4; ++i) {
action->setData(i);
mce->toolButton()->addAction(action);
connect(action, SIGNAL(triggered()), mce, SLOT(updateSpinBoxValue()));
}
return mce;
}
QWidget *ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
Q_UNUSED(option);
Q_UNUSED(index);
MyComplexEditor *mce = new MyComplexEditor(parent);
for (int i = 0; i < 4; ++i) {
QAction *action = new QAction(tr("action%1").arg(i), mce);
action->setData(i);
mce->toolButton()->addAction(action);
connect(action, SIGNAL(triggered()), mce, SLOT(updateSpinBoxValue()));
}
return mce;
}
To copy to clipboard, switch view to plain text mode
Bookmarks