這是我正在做的事情(所有的父母和孩子必須有一個關閉按鈕在未來,只有懸停的項目將能夠顯示**關閉**按鈕):如何爲QTreeWidget創建委託?
我的委託代碼:
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);
};
隨着QTreeWidget
連接代碼:
recipientsView()->setItemDelegateForColumn(1, new CloseButton(this));
其中recipientsView()
是一個簡單的QTreeWidget
。
問題是QToolButton
完全沒有顯示(它必須在第二列,即樹中的列索引是1
)。我做錯了什麼?
我已經檢查過關於代表的所有Qt演示示例,以及有關QItemDelegate
和類似內容的第一個Google結果。
在VS2008調試器構造函數執行,但'createEditor()'方法都沒有。首先,Thrx, – mosg