qt5的mvc实现,model总共8列数据,代理其中第7列为icon+文本,文本颜色可设置,ico在文本之前,请思考一下,给出c++示例代码
时间: 2024-03-20 07:42:49 浏览: 18
好的,下面是一个简单的示例代码,用于演示如何在Qt5中使用MVC模式实现一个包含8列数据的数据模型,其中第7列数据包含图标和文本,可以设置文本颜色。
```cpp
#include <QApplication>
#include <QStandardItemModel>
#include <QTableView>
#include <QStandardItem>
#include <QStyledItemDelegate>
#include <QPainter>
// 定义代理类
class IconTextDelegate : public QStyledItemDelegate
{
public:
// 重写绘制函数
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
if (index.column() == 6) // 第7列需要绘制图标和文本
{
// 获取数据
QVariant iconData = index.data(Qt::DecorationRole);
QIcon icon = qvariant_cast<QIcon>(iconData);
QString text = index.data(Qt::DisplayRole).toString();
QColor textColor = index.data(Qt::TextColorRole).value<QColor>();
// 绘制图标和文本
QRect iconRect = option.rect.adjusted(2, 2, -option.rect.width() / 2, -2);
QRect textRect = option.rect.adjusted(option.rect.width() / 2, 0, -2, 0);
icon.paint(painter, iconRect);
painter->setPen(textColor);
painter->drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, text);
}
else // 其他列使用默认绘制函数
{
QStyledItemDelegate::paint(painter, option, index);
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建数据模型
QStandardItemModel* model = new QStandardItemModel(0, 8);
model->setHeaderData(0, Qt::Horizontal, "Column 1");
model->setHeaderData(1, Qt::Horizontal, "Column 2");
model->setHeaderData(2, Qt::Horizontal, "Column 3");
model->setHeaderData(3, Qt::Horizontal, "Column 4");
model->setHeaderData(4, Qt::Horizontal, "Column 5");
model->setHeaderData(5, Qt::Horizontal, "Column 6");
model->setHeaderData(6, Qt::Horizontal, "Column 7");
model->setHeaderData(7, Qt::Horizontal, "Column 8");
// 添加数据
for (int i = 0; i < 10; ++i)
{
QList<QStandardItem*> rowItems;
for (int j = 0; j < 8; ++j)
{
QStandardItem* item = new QStandardItem(QString("Item %1-%2").arg(i).arg(j));
if (j == 6) // 第7列设置图标和文本
{
item->setData(QIcon(":/icon.png"), Qt::DecorationRole);
item->setData(QColor(Qt::red), Qt::TextColorRole);
}
rowItems.append(item);
}
model->appendRow(rowItems);
}
// 创建表格视图并设置代理
QTableView* tableView = new QTableView();
tableView->setModel(model);
tableView->setItemDelegate(new IconTextDelegate());
tableView->setWindowTitle("MVC Example");
tableView->show();
return a.exec();
}
```
这段代码中,我们创建了一个8列的数据模型,其中第7列数据包含图标和文本。为了在表格视图中绘制图标和文本,我们创建了一个自定义代理类IconTextDelegate,并重写了它的绘制函数。在绘制第7列数据时,我们获取数据中的图标和文本信息,并使用QPainter绘制出来。最后,我们创建了一个表格视图,并设置了代理类来实现我们的需求。
阅读全文