QTableView 插入QPushButton实现

  //////////////////////////////////////////////////
    ct = new CTableView(QRect(100,100,500,400),this);
    QStringList headerlst ;
    headerlst<<"0"<<"1"<<"2"<<"3";
    ct->setHeader(headerlst);

    ct->getModel()->setItem(0,0,new QStandardItem(QString("已完成")));
    ct->getModel()->setItem(0,1,new QStandardItem(QString("已完成")));
    ct->getModel()->setItem(0,2,new QStandardItem(QString("已完成")));

    ct->getModel()->setItem(1,0,new QStandardItem(QString("已完成")));
    ct->getModel()->setItem(2,0,new QStandardItem(QString("已完成")));

    ct->setBtnColumn(3,"btn");
   //////////////////////////////////////////////////

#ifndef CTABLEVIEW_H
#define CTABLEVIEW_H
#include <QTableView>
#include <QStandardItemModel>
#include <QPushButton>


class CTableView:public QTableView
{
    Q_OBJECT
public:
    explicit  CTableView(QRect rect,QWidget* parent=0);

    void InitTableView(QRect rect);

    void SetTabViewColumnSpace();

    void setHeader(QStringList headerLst);

    void setBtnColumn(int col,QString btnText="");

    QStandardItemModel* getModel();
public slots:
    void ClickDownloadButton();

    QString getColorQss(QString odd,QString even);

private:
     QStandardItemModel* m_recordModel;

     QString m_oddColor;

     QString m_evenColor;

};

#endif // CTABLEVIEW_H
#include "ctableview.h"
#include <QHeaderView>


static QString tableViewQss =         "QTableView::item:alternate:!selected, "\
                               "QTableWidget::item:alternate:!selected, "\
                               "QListView::item:alternate:!selected { background: color_Odd; } "\
                               "QTableView::item:!alternate:!selected, "\
                               "QTableWidget::item:!alternate:!selected, "\
                               "QListView::item:!alternate:!selected { background: color_Even; }";



CTableView::CTableView(QRect rect,QWidget *parent):
     QTableView(parent)
{
    InitTableView(rect);
}

void CTableView::InitTableView(QRect rect)
{

    this->setStyleSheet(this->getColorQss("lightYellow","lightBlue"));

    this->horizontalHeader()->setFont(QFont("宋体",10));
    this->setEditTriggers(QAbstractItemView::NoEditTriggers);
    this->setSelectionMode(QAbstractItemView::SingleSelection);
    this->setSelectionBehavior(QAbstractItemView::SelectRows);
    this->setAlternatingRowColors(true);

    this->setGeometry(rect);

    this->m_recordModel = new QStandardItemModel(this);
}

void CTableView::SetTabViewColumnSpace()
{
    //根据内容来确定列宽度
        this->resizeColumnsToContents();
        this->horizontalHeader();
        //获取表头列数
        for(int i = 0; i < this->horizontalHeader()->count(); i++)
        {
            this->setColumnWidth(i, this->columnWidth(i) + 40);  //避免列内容挤
        }
        this->horizontalHeader()->setStretchLastSection(true);        //最后一列补全所有空白位置
}

void CTableView::setHeader(QStringList headerLst)
{
    m_recordModel->setHorizontalHeaderLabels(headerLst);
    this->setModel(m_recordModel);//进行属性设置时,此语句置前
}

void CTableView::setBtnColumn(int col,QString btnText)
{
    for (int i = 0; i < this->horizontalHeader()->count(); i++)
    {
        QPushButton* _button = new QPushButton(btnText);
//        if(i%2==0)
//        {
//            _button->setStyleSheet(tr("background-color:%1").arg(this->m_evenColor));
//        }
//        else
//        {
//            _button->setStyleSheet(tr("background-color:%1").arg(this->m_oddColor));
//        }

        connect(_button, SIGNAL(clicked(bool)), this, SLOT(ClickDownloadButton())); //
        _button->setProperty("row", i);  //为按钮设置row属性
        this->setIndexWidget(m_recordModel->index(i, col), _button);

    }
}

QStandardItemModel *CTableView::getModel()
{
    return this->m_recordModel;
}

void CTableView::ClickDownloadButton()
{
    QPushButton* btn = (QPushButton*)sender();
    QString row  = btn->property("row").toString();

    qDebug()<<"row "<<row;
}

QString CTableView::getColorQss(QString odd, QString even)
{
    this->m_oddColor = odd;
    this->m_evenColor = even;

    tableViewQss.replace("color_Odd",odd);
    tableViewQss.replace("color_Even",even);
    return tableViewQss;
}
发布了33 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LWLGZY/article/details/91384692