// MyTreeWidget.h
#pragma once
#include <QTreeWidget>
#include <iostream>
#include <QDebug>
{
Q_OBJECT
public:
MyTreeWidget
(QWidget *parent
= NULL);
public slots:
};
// MyTreeWidget.cpp
#include "MyTreeWidget.h"
#include <QMouseEvent>
#include <QWidget>
{
setMouseTracking(true);
}
{
setCurrentIndex( indexAt(event->pos()));
}
{
qDebug() << "I never get here\n";
}
#include "moc_MyTreeWidget.cpp"
// MyDelegate.h
#pragma once
#include <QStyledItemDelegate>
class MyDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
public:
};
// MyDelegate.cpp
#include "MyDelegate.h"
#include <QtGui>
MyDelegate
::MyDelegate(QObject *parent
) : QStyledItemDelegate
(parent
){
}
{
if(index.column() == 0)
{
model->setData(index, btn->text());
} else {
QStyledItemDelegate::setModelData(editor, model, index);
}
}
{
if(index.column() == 0)
{
QString s1
(index.
model()->data
(index, Qt
::EditRole).
toString());
QString s2
(index.
data(Qt
::DisplayRole).
toString());
return btn;
}
return 0;
}
{
if(!btn)
return;
btn->setText(index.model()->data(index, Qt::EditRole).toString());
}
// main.cpp
#include <QtGui/QApplication>
#include "MyDelegate.h"
#include "MyTreeWidget.h"
int main(int argc, char *argv[])
{
MyTreeWidget* tree = new MyTreeWidget;
tree->setItemDelegate(new MyDelegate(tree));
tree->setColumnCount(1);
item01->setFlags(item01->flags() | Qt::ItemIsEditable);
tree->addTopLevelItem(item01);
item01->setText(0, "item01");
item02->setFlags(item02->flags() | Qt::ItemIsEditable);
tree->addTopLevelItem(item02);
item02->setText(0, "item02");
tree->show();
return app.exec();
}
// MyTreeWidget.h
#pragma once
#include <QTreeWidget>
#include <iostream>
#include <QDebug>
class QWidget;
class MyTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
MyTreeWidget(QWidget *parent = NULL);
void mouseMoveEvent(QMouseEvent *event);
public slots:
void SlotItemPressed(QTreeWidgetItem *item, int index);
};
// MyTreeWidget.cpp
#include "MyTreeWidget.h"
#include <QMouseEvent>
#include <QWidget>
MyTreeWidget::MyTreeWidget(QWidget *parent) : QTreeWidget(parent)
{
connect( this, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ),
this, SLOT( SlotItemPressed( QTreeWidgetItem*, int ) ) );
setMouseTracking(true);
setEditTriggers(QAbstractItemView::CurrentChanged);
}
void MyTreeWidget::mouseMoveEvent(QMouseEvent *event)
{
QTreeWidget::mouseMoveEvent(event);
setCurrentIndex( indexAt(event->pos()));
}
void MyTreeWidget::SlotItemPressed(QTreeWidgetItem *item, int index)
{
qDebug() << "I never get here\n";
}
#include "moc_MyTreeWidget.cpp"
// MyDelegate.h
#pragma once
#include <QStyledItemDelegate>
class QAbstractItemView;
class MyDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
MyDelegate(QObject *parent = 0);
public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
};
// MyDelegate.cpp
#include "MyDelegate.h"
#include <QtGui>
MyDelegate::MyDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}
void MyDelegate::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
{
if(index.column() == 0)
{
QPushButton *btn = qobject_cast<QPushButton*>(editor);
model->setData(index, btn->text());
} else {
QStyledItemDelegate::setModelData(editor, model, index);
}
}
QWidget * MyDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
if(index.column() == 0)
{
QString s1(index.model()->data(index, Qt::EditRole).toString());
QString s2(index.data(Qt::DisplayRole).toString());
QPushButton *btn = new QPushButton(s1, parent);
return btn;
}
return 0;
}
void MyDelegate::setEditorData ( QWidget * editor, const QModelIndex & index ) const
{
QPushButton *btn = qobject_cast<QPushButton*>(editor);
if(!btn)
return;
btn->setText(index.model()->data(index, Qt::EditRole).toString());
}
// main.cpp
#include <QtGui/QApplication>
#include "MyDelegate.h"
#include "MyTreeWidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
MyTreeWidget* tree = new MyTreeWidget;
tree->setItemDelegate(new MyDelegate(tree));
tree->setColumnCount(1);
QTreeWidgetItem *item01 = new QTreeWidgetItem(tree);
item01->setFlags(item01->flags() | Qt::ItemIsEditable);
tree->addTopLevelItem(item01);
item01->setText(0, "item01");
QTreeWidgetItem *item02 = new QTreeWidgetItem(tree);
item02->setFlags(item02->flags() | Qt::ItemIsEditable);
tree->addTopLevelItem(item02);
item02->setText(0, "item02");
tree->show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks