> 文章列表 > QTableView中添加代理控件

QTableView中添加代理控件

QTableView中添加代理控件

目录

1、设置样式文件

2、set base attribute

 3、设置model

4、设置表头

5、设置数据     

6、添加代理控件

6.1 添加 QSpinBox 代理 

6.2 添加 QComboBox 代理

6.3 添加 QPushButton 代理

6.4 添加 CheckBox 代理 

6.5 添加 Pixmap 代理

6.6 添加 LineEdit 代理

6.7 添加 ReadOnly 代理

6.8 添加 Text 代理 

6.9 添加 QProcessBar 代理

6.10 添加 DateEdit 代理

6.11 添加 添加自定义窗口 代理 

6.13 添加 DoubleProcessBar 代理

7、获取某一单元格数据 


开发过程中进程使用MVD模型,添加各种代理控件,本文在此基础上整理一些数据模型代理,包括:QPushbutton、QLineEdit、QPixmap、QChecledBox、QComboBox、QSpinBox、QProcessBar、只读列、自定义窗口等共13种代理方式,如图所示:

1、设置样式文件

QString qssData = nullptr;
QFile fileqss(":/qss/QSSUITableView");
if(fileqss.open(QFile::ReadOnly))
{qssData = fileqss.readAll();fileqss.close();
}
ui->tableView->setStyleSheet(qssData);

2、set base attribute

    ui->tableView->verticalHeader()->hide();                                                   // 隐藏垂直头ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);                       // 隐藏水平头//ui->tableView->horizontalHeader()->setStretchLastSection(true);                          // 设置随后一列拉伸ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);         // 设置列平均分配//ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);  // 设置TreeWidget水平滚动和自适应宽度//ui->tableView->setColumnWidth(headersList.count() - 1, TITLE_FIXED_HEIGHT);              // 设置最后一列固定//ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);      // 行单选ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::MultiSelection);         // 行多选 (单选QAbstractItemView::SingleSelection 多选:QAbstractItemView::MultiSelection)ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);                         // 不可编辑ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);                        // 设置选中模式为整行ui->tableView->setShowGrid(false);                                                         // 显示/隐藏网格线setFocusPolicy(Qt::FocusPolicy::NoFocus);                                                  // 设置选中之后无虚线焦点//horizontalHeader()->setMinimumSectionSize(100);                                          // 设置最小列宽//horizontalHeader()->setMaximumSectionSize(100);                                          // 设置最大列宽ui->tableView->verticalHeader()->setDefaultSectionSize(25);                                 // 可以设置tableview所有列的默认行高为15。//horizontalHeader()->setDefaultSectionSize(15);                                            // 可以设置tableview所有行的默认列宽为15。ui->tableView->setWordWrap(false);                                                         // 设置不自动换行setMouseTracking(true);                                                                     // 设置鼠标追踪// 设置第0列固定宽度/*ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed);ui->tableView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);ui->tableView->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Fixed);ui->tableView->horizontalHeader()->setSectionResizeMode(5, QHeaderView::Fixed);ui->tableView->setColumnWidth(0, 50);ui->tableView->setColumnWidth(2, 150);ui->tableView->setColumnWidth(3, 150);ui->tableView->setColumnWidth(4, 150);ui->tableView->setColumnWidth(5, 150);*/

 3、设置model

    model = new QStandardItemModel;ui->tableView->setModel(model);

4、设置表头

    QStringList headerList;headerList<<"姓名"<<"QSpinBox"<<"QComboBox"<<"QPushButton"<<"CheckBox"<<"QPixmap"<<"QLineEdit"<<"ReadOnly"<<"Text"<<"ProcessBar"<<"DateEdit"<<"CustomWidget"<<"pDoubleProcessBar";model->setHorizontalHeaderLabels(headerList);

5、设置数据     

    model->setItem(0,0,new QStandardItem("张三"));model->setItem(1,0,new QStandardItem("李四"));model->setItem(2,0,new QStandardItem("王二"));model->setItem(3,0,new QStandardItem("小明同学"));model->setItem(0,1,new QStandardItem("1"));model->setItem(1,1,new QStandardItem("2"));model->setItem(2,1,new QStandardItem("3"));ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);         // 选择一行

6、添加代理控件

6.1 添加 QSpinBox 代理 

    CUISpinBoxDelegate *pSpinBox = new CUISpinBoxDelegate(this);ui->tableView->setItemDelegateForColumn(1, pSpinBox);

6.2 添加 QComboBox 代理

    CUIComboBoxDelegate *pComboBox = new CUIComboBoxDelegate(this);ui->tableView->setItemDelegateForColumn(2, pComboBox);

6.3 添加 QPushButton 代理

    CUIMutipleButtonDeleagate *pMutipleBtn = new CUIMutipleButtonDeleagate(QStringList() << "修改" << "删除", this);ui->tableView->setItemDelegateForColumn(3, pMutipleBtn);connect(pMutipleBtn, &CUIMutipleButtonDeleagate::editData, [&](){QMessageBox::information(this, "提示", "这是一个编辑按钮");});connect(pMutipleBtn, &CUIMutipleButtonDeleagate::deleteData, [&](){QMessageBox::information(this, "提示", "这是一个删除按钮");});

6.4 添加 CheckBox 代理 

    /*CUITableHeaderView /pTableHeaderView = new CUITableHeaderView(Qt::Horizontal, ui->tableView);connect(pTableHeaderView, &CUITableHeaderView::stateChanged, this, &MainWindow::headerStateChangedSlot);connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(itemChangedSlot(QStandardItem*)));ui->tableView->setHorizontalHeader(pTableHeaderView);CUICheckBoxDelegate *pCheckedBox = new CUICheckBoxDelegate(this);ui->tableView->setItemDelegateForColumn(4, pCheckedBox);

6.5 添加 Pixmap 代理

    CUIPixmapDelegate *pPixmap = new CUIPixmapDelegate(this);ui->tableView->setItemDelegateForColumn(5, pPixmap);

6.6 添加 LineEdit 代理

CUILineEditDelegate *pLineEdit = new CUILineEditDelegate(this);

6.7 添加 ReadOnly 代理

    CUIOnlyReadDelegate *pReadOnly = new CUIOnlyReadDelegate(this);ui->tableView->setItemDelegateForColumn(7, pReadOnly);

6.8 添加 Text 代理 

    CUITextDelegate *pLabel = new CUITextDelegate(this);ui->tableView->setItemDelegateForColumn(8, pLabel);

6.9 添加 QProcessBar 代理

    CUIProcessBarDelegate *pProcessBar = new CUIProcessBarDelegate();ui->tableView->setItemDelegateForColumn(9, pProcessBar);QModelIndex index = model->index(0, 9, QModelIndex());model->setData(index,29);

6.10 添加 DateEdit 代理

    CUIDateEditDelegate *pDateEdit = new CUIDateEditDelegate();ui->tableView->setItemDelegateForColumn(10, pDateEdit);

6.11 添加 添加自定义窗口 代理 

    CUICustomDelegate *pCustomWidget = new CUICustomDelegate(this);ui->tableView->setItemDelegateForColumn(11, pCustomWidget);

6.13 添加 DoubleProcessBar 代理

    CUIDoubleProcessBarDelegate *pDoubleProcessBar = new CUIDoubleProcessBarDelegate(this);ui->tableView->setItemDelegateForColumn(12, pDoubleProcessBar);

7、获取某一单元格数据 

    //model->index(0, 1).data();

详细代码下载