You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
newValue/tpvs17/lpReport/qreportwidget.cpp

187 lines
5.0 KiB
C++

4 years ago
#include "qreportwidget.h"
#include <QHeaderView>
#include <QScrollBar>
#pragma execution_character_set("utf-8")
QReportWidget::QReportWidget(QString str /*=QString()*/, QWidget *parent/*=0*/) : QWidget(parent)
{
m_Title = str;
m_titleLabel = new QLabel;
m_TableView = new QTableView;
m_tableViewModel = new QStandardItemModel;
m_TableView->setAlternatingRowColors(true);
m_TableView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_TableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_TableView->setWordWrap(true);
m_TableView->resizeColumnsToContents();
m_TableView->resizeRowsToContents();
//m_TableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);//自适应行宽
m_TableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_TableView->horizontalScrollBar()->setEnabled(false);
m_TableView->setMinimumHeight(100);
QVBoxLayout *VBox = new QVBoxLayout;
VBox->addWidget(m_titleLabel);
VBox->addWidget(m_TableView);
setLayout(VBox);
}
QReportWidget::~QReportWidget()
{
if (m_TableView){
delete m_TableView;
m_TableView = NULL;
}
if (m_tableViewModel){
m_tableViewModel->clear();
delete m_tableViewModel;
m_tableViewModel = NULL;
}
}
void QReportWidget::UpdateTableView()
{
m_titleLabel->setText(m_Title);
QStandardItemModel *m_tableViewModelTmp = new QStandardItemModel;
m_TableView->setModel(m_tableViewModelTmp);
QFont font;
font.setPixelSize(14);
m_titleLabel->setFont(font);
m_tableViewModel->clear();
m_tableViewModel->setHorizontalHeaderItem(0, new QStandardItem(tr("型号")));
m_tableViewModel->setHorizontalHeaderItem(1, new QStandardItem(tr("数量")));
int nIndex = 0;
for (QMap<QString, int>::iterator its = m_str.begin(); its != m_str.end(); ++its)
{
m_tableViewModel->setItem(nIndex, 0, new QStandardItem(its.key()));
m_tableViewModel->setItem(nIndex, 1, new QStandardItem(QString::number(*its)));
nIndex++;
}
if (m_listStr.size() > 0)
{
for (int m_Index = 0; m_Index < m_listStr.size(); m_Index++)
{
m_tableViewModel->setItem(nIndex, 0, new QStandardItem(m_listStr.at(m_Index).m_str));
m_tableViewModel->setItem(nIndex, 1, new QStandardItem(QString::number(m_listStr.at(m_Index).num)));
nIndex++;
}
}
m_TableView->setModel(m_tableViewModel);
delete m_tableViewModelTmp;
m_tableViewModelTmp = NULL;
}
void QReportWidget::drawTexts(QPainter* painter)
{
QDateTime cuttrnt_date_time = QDateTime::currentDateTime();
QString current_date = cuttrnt_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");
QPoint point(10, 14);
QFont font;
font.setPixelSize(14);
painter->setFont(font);
//if (!m_Title.isEmpty())
{
// return;
}
QTextOption option(Qt::AlignLeft | Qt::AlignVCenter);
option.setWrapMode(QTextOption::WordWrap);
painter->drawText(rect(), m_Title, option);
if (m_str.size() > 0)
{
int y = point.y();
point.setY(y + 20);
painter->drawText(point, tr("编号"));
point.setX(10 + 2 * 28);
painter->drawText(point, tr("型号"));
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, tr("数量"));
int i = 1;
point.setX(10);
font.setPixelSize(14);
painter->setFont(font);
for (QMap<QString, int>::iterator its = m_str.begin(); its != m_str.end(); ++its)
{
int y = point.y();
point.setX(10);
point.setY(y + 20);
painter->drawText(point, QString::number(i++));
point.setX(10 + 2 * 28);
painter->drawText(point, its.key());
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, QString::number(*its));
}
if (m_listStr.size() > 0)
{
for (int nIndex = 0; nIndex < m_listStr.size(); nIndex++)
{
int y = point.y();
point.setX(10);
point.setY(y + 20);
painter->drawText(point, QString::number(i++));
point.setX(10 + 2 * 28);
painter->drawText(point, m_listStr.at(nIndex).m_str);
point.setX(10 + 2 * 28 + 3 * 28);
painter->drawText(point, QString::number(m_listStr.at(nIndex).num));
}
}
}
else
{
int y = point.y();
point.setY(y + 20);
painter->drawText(point, tr("请选择对应时间并查询数据!"));
}
//painter->drawLine(80, 100, 650, 500);
//painter->setPen(Qt::red);
//painter->drawRect(10, 10, 100, 400);
//painter->setPen(QPen(Qt::green, 5));
//painter->setBrush(Qt::blue);
//painter->drawEllipse(50, 150, 400, 200);
}
void QReportWidget::DrawOneItem(QPainter* painter, QPoint& point, QStringList &mList)
{
}
void QReportWidget::paintEvent(QPaintEvent *event)
{
//QPainter painter_text(this);
//drawTexts(&painter_text);
//painter_text.end();
}
void QReportWidget::AppendData(QString str, int num, bool model)
{
if (model == 0)
{
m_listStr.clear();
}
DataItem m_item;
m_item.m_str = str;
m_item.num = num;
m_listStr.append(m_item);
update();
}
void QReportWidget::setTitle(QString str)
{
m_Title = str;
}
void QReportWidget::ClearData()
{
m_Title.clear();
m_listStr.clear();
m_str.clear();
}
Q_SLOT void QReportWidget::SetData(QMap<QString, int> &m_strMap)
{
m_str = m_strMap;
}
void QReportWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
}