Oto, co próbuję zrobić (wszyscy rodzice i dzieci muszą mieć przycisk zamknij po prawej stronie, w przyszłości tylko ukryta pozycja będzie mogła wyświetlić przycisk ** zamknij **):Jak utworzyć delegata dla QTreeWidget?
Mój kod delegat:
class CloseButton : public QItemDelegate
{
Q_OBJECT
public:
CloseButton(QObject* parent = 0)
: QItemDelegate(parent)
{};
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
if (index.column() == 1)
{
QToolButton* button = new QToolButton(parent);
button->setIcon(QIcon(CLOSE_ICON));
//button->setFixedSize(16, 16);
//button->setAutoRaise(true);
//button->setVisible(true);
CONNECT(button, SIGNAL(clicked()), this, SLOT(emitCommitData()));
return button;
}
return (new QWidget);
}
private slots:
void emitCommitData()
{
emit commitData(qobject_cast< QWidget* >(sender()));
}
private:
//Q_DISABLE_COPY(CloseButton);
};
Z QTreeWidget
kodu gra:
recipientsView()->setItemDelegateForColumn(1, new CloseButton(this));
gdzie recipientsView()
to prosty QTreeWidget
.
Problem polega na tym, że s nie są w ogóle pokazywane (muszą znajdować się w drugiej kolumnie, tzn. Indeks kolumny w drzewie to 1
). Co robię źle?
Sprawdziłem już wszystkie przykłady demonstracyjne Qt dotyczące delegatów i pierwszego wyniku Google o numerach QItemDelegate
i podobnych.
W VS2008 konstruktor debugger wykonuje, ale 'createEditor()' metody nie są. – mosg