Vij*_*y13 5 c++ qt qt4 qtableview
我已经习惯QTableView在我的Qt程序中看到表格数据,并且我需要将某些单元格与其他单元格区分开来,可以在这些特定单元格中绘制字体粗体或绘制这些特定单元格的背景.
有人可以提供代码而不仅仅是说使用QAbstractItemDelegate吗?
我阅读了文档,QAbstractItemDelegate但无法理解,请使用示例解释.
vah*_*cho 23
为了使文本在表视图中以不同方式显示,您可以修改模型(如果存在)以及模型函数中的句柄Qt::FontRole和/或Qt::ForegroundRole角色QAbstractItemModel::data().例如:
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::FontRole && index.column() == 0) { // First column items are bold.
QFont font;
font.setBold(true);
return font;
} else if (role == Qt::ForegroundRole && index.column() == 0) {
return QColor(Qt::red);
} else {
[..]
}
Run Code Online (Sandbox Code Playgroud)
}
无需使用抽象委托。样式化委托可以完成您所需的大部分工作。使用它并重新实现仅需要的行为。
。H:
#include <QStyledItemDelegate>
class MyDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit MyDelegate(QObject *parent = 0);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
bool shouldBeBold(const QModelIndex &index);
}
Run Code Online (Sandbox Code Playgroud)
.cpp:
MyDelegate::MyDelegate(QObject *parent) :
QStyledItemDelegate(parent)
{
}
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
QVariant data = index.data(...); // pick the data you need here
opt.font.setBold(shouldBeBold(data));
QStyledItemDelegate::paint(painter, opt, index);
}
bool MyDelegate::shouldBeBold(const QModelIndex &index)
{
// you need to implement this
}
Run Code Online (Sandbox Code Playgroud)
然后将委托应用于视图。如果shouldBeBold()返回false,则委托将像标准油漆一样绘制。如果返回true,它将应用粗体。
我希望这足以让您开始。
| 归档时间: |
|
| 查看次数: |
11004 次 |
| 最近记录: |