QT视图模型委托项目案例
时间: 2023-07-21 20:07:15 浏览: 100
QT项目开发实例
3星 · 编辑精心推荐
以下是一个简单的QT视图模型委托项目案例:
假设有一个表格,其中一列显示了用户的年龄,我们想要让年龄小于18岁的行以红色显示,而年龄大于等于18岁的行以绿色显示。我们可以通过使用QT的视图模型委托来实现此目的。
首先,我们需要定义一个自定义的委托类,该类继承自QStyledItemDelegate类。在该类中,我们将实现一个paint()函数,该函数将会在每次需要绘制表格项时被调用。
```cpp
class AgeDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
// 获取年龄值
int age = index.data(Qt::DisplayRole).toInt();
// 设置画笔颜色
if (age < 18) {
painter->setPen(QColor("red"));
} else {
painter->setPen(QColor("green"));
}
// 调用基类的paint()函数进行绘制
QStyledItemDelegate::paint(painter, option, index);
}
};
```
接下来,我们需要在主窗口中创建一个表格,并为其设置一个QStandardItemModel模型。然后,我们将会为该模型的第二列(即年龄列)设置我们刚刚定义的委托类。
```cpp
// 创建表格和模型
QTableView *tableView = new QTableView(this);
QStandardItemModel *model = new QStandardItemModel(4, 2, this);
// 设置表头
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Age"));
// 设置模型数据
model->setData(model->index(0, 0), "John Doe");
model->setData(model->index(0, 1), 25);
model->setData(model->index(1, 0), "Jane Smith");
model->setData(model->index(1, 1), 17);
model->setData(model->index(2, 0), "Bob Johnson");
model->setData(model->index(2, 1), 30);
model->setData(model->index(3, 0), "Mary Williams");
model->setData(model->index(3, 1), 16);
// 为模型的第二列设置委托
tableView->setItemDelegateForColumn(1, new AgeDelegate(this));
// 将模型设置给表格
tableView->setModel(model);
```
现在,我们运行程序,就可以看到表格中年龄小于18岁的行以红色显示,而年龄大于等于18岁的行以绿色显示。这就是通过QT的视图模型委托实现的。
注意:本示例并不完整,只是为了演示视图模型委托的基本用法。在实际应用中,您可能需要对上述代码进行进一步的修改和完善。
阅读全文