Qtreeview使用delegate,点击项和下面一项字体变红,c++完整代码
时间: 2024-02-17 09:05:30 浏览: 82
好的,以下是使用 C++ 实现 QTreeView delegate 的代码示例,实现点击项和下面一项字体变红的效果:
```cpp
#include <QApplication>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include <QAbstractItemView>
#include <QWidget>
class MyDelegate : public QStyledItemDelegate
{
public:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
{
QStyledItemDelegate::initStyleOption(option, index);
if (option->state & QStyle::State_Selected)
{
option->font.setBold(true);
QModelIndex nextIndex = index.sibling(index.row()+1, index.column());
if (nextIndex.isValid())
{
QStyleOptionViewItem nextOption;
initStyleOption(&nextOption, nextIndex);
nextOption.font.setBold(true);
QWidget* widget = option->widget;
widget->update(widget->visualRect(nextIndex));
}
}
}
};
class MyTreeView : public QTreeView
{
public:
MyTreeView(QWidget *parent = nullptr) : QTreeView(parent)
{
setSelectionMode(QAbstractItemView::SingleSelection);
setEditTriggers(QAbstractItemView::NoEditTriggers);
QStandardItemModel *model = new QStandardItemModel(3, 1, this);
for (int i = 0; i < 3; ++i)
{
QStandardItem *item = new QStandardItem(QString("item %1").arg(i));
model->setItem(i, 0, item);
}
setModel(model);
MyDelegate *delegate = new MyDelegate(this);
setItemDelegate(delegate);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *w = new QWidget;
MyTreeView *treeView = new MyTreeView(w);
treeView->setGeometry(100, 100, 200, 200);
w->show();
return app.exec();
}
```
在 MyDelegate 类中,重写 initStyleOption 函数,实现了和 Python 中相同的逻辑。
在 MyTreeView 类中,创建了一个 QStandardItemModel,并将其设置为 QTreeView 的模型。然后,创建了一个 MyDelegate 对象,并将其设置为 QTreeView 的 delegate。
运行上述代码,即可看到 QTreeView 中,点击项和下面一项字体变红的效果。
阅读全文
相关推荐


















