まず、レンダリング
第二に、建設プロジェクトのアイデア
MVCビューモデルを使用して、QTableViewビュー・オブジェクト、QAbstractTableModel構造データ編成、QStyledItemDelegateテーブルデータスタイル・エージェントを定義する、QHeaderViewヘッダデータパターンエージェントを実現します。
第三に、コードスニペット
#include "tablewidget.h"
#include "ui_tablewidget.h"
#include <QAbstractItemView>
tableWidget::tableWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::tableWidget)
{
ui->setupUi(this);
tableview *view = new tableview(this);
tablemodel *model = new tablemodel(this);
tabledelegate *delegate = new tabledelegate(this);
headdelegate *hdelegate = new headdelegate(Qt::Horizontal,view);
view->setModel(model);
view->setItemDelegate(delegate);
view->setHorizontalHeader(hdelegate);
view->setFocusPolicy(Qt::NoFocus);
ui->horizontalLayout->addWidget(view);
view->verticalHeader()->hide();
view->horizontalHeader()->setHighlightSections(false);
view->horizontalHeader()->setSectionsClickable(false);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->setContextMenuPolicy(Qt::CustomContextMenu);
view->setAlternatingRowColors(true);
view->setStyleSheet("QTableView::indicator {width: 14px; height: 14px; padding-left:6px;}"
"QTableView::item{background-color:#ffffff;color:#666666;padding-left:8px;}"
"QTableView::item:selected{background-color:#EBF3FF;color:#666666;}"
"QTableView{border-right-width:0px;border-top-width:1px;border-style:solid;border-color:#eeeeee;gridline-color:#eeeeee;background-color:white;font-family: MicrosoftYaHei;font-size: 12px;}"
);
view->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{background:transparent;width:12px;border-radius:0px;border-width:1px;border-style:solid;border-color:#eeeeee;}"
"QScrollBar::handle:vertical{width:1px;background:#cccccc;border-radius:3px;min-height:60px;}"
"QScrollBar::sub-line:vertical {background:transparent;}"
"QScrollBar::add-line:vertical {background:transparent;}");
}
tableWidget::~tableWidget()
{
delete ui;
}
#include "tablemodel.h"
tablemodel::tablemodel(QObject *par)
{
for(int i=0;i<17;i++){
QStringList list;
for(int j=0;j<5;j++){
list.append(QString::number(i));
}
m_vlist.append(list);
}
}
tablemodel::~tablemodel()
{
}
int tablemodel::rowCount(const QModelIndex &parent) const
{
return m_vlist.size();
}
int tablemodel::columnCount(const QModelIndex &parent) const
{
return m_vlist.value(0).size();
}
bool tablemodel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(!index.isValid())
return false;
return QAbstractTableModel::setData(index,value,role);
}
QVariant tablemodel::data(const QModelIndex &index, int role) const
{
if(!index.isValid())
return QVariant();
if(Qt::TextAlignmentRole == role)
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
if(Qt::DisplayRole == role){
return m_vlist.value(index.row()).value(index.column());
}
return QVariant();
}
QVariant tablemodel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(orientation == Qt::Horizontal)
{
switch(role)
{
case Qt::TextAlignmentRole:
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
case Qt::DisplayRole:
return QString("标题")+QString::number(section);
default:
return QVariant();
}
}
return QAbstractTableModel::headerData(section,orientation,role);
}
#include "tabledelegate.h"
tabledelegate::tabledelegate(QObject *parent)
{
}
void tabledelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
//去掉Focus
QStyleOptionViewItem viewOption(option);
initStyleOption(&viewOption, index);
if (option.state.testFlag(QStyle::State_HasFocus))
{
viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
}
QStyledItemDelegate::paint(painter, viewOption, index);
}
bool tabledelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
return false;
}
#include "headdelegate.h"
headdelegate::headdelegate(Qt::Orientation orientation, QWidget *parent)
: QHeaderView(orientation, parent)
{
this->setStyleSheet("QHeaderView{border-width:0px;background-color:#F8F8F8;color:#333333;font-family: MicrosoftYaHei;font-size: 12px;}"
"QHeaderView::section:first{border-left:1px;border-right:1px;border-style:solid;border-color:#eeeeee;height:37px;padding-left:10px;background-color:#F8F8F8;}"
"QHeaderView::section:middle{border-left:0px;border-right:1px;border-style:solid;border-color:#eeeeee;height:37px;padding-left:10px;background-color:#F8F8F8;}"
"QHeaderView::section:last{border-left:0px;border-right:1px;border-style:solid;border-color:#eeeeee;height:37px;padding-left:10px;background-color:#F8F8F8;}");
}
void headdelegate::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
QHeaderView::paintSection(painter, rect, logicalIndex);
}
ようこそ展示会の
QQ:519 096 571
Eメール:[email protected]