QMap<int,QPushButton* > color_buttons;
第一步添加按钮
color_buttons.clear();
for(int i = 0; i<dataList.size(); i++)
{
QPushButton* button_p = new QPushButton();
connect(button_p, &QPushButton::clicked, this, [=](){
QColor color = QColorDialog::getColor();
if (color.isValid()) {
QPushButton *button = qobject_cast<QPushButton *>(sender());
if (button)
{
// button->setStyleSheet(QString("background-color: %1").arg(color.name()));
QJsonObject obj = dataList[i].toObject();
obj[headtitle.at(4)] = color.name();
dataList[i] = obj;
if( !JsonTool::save_json_file<QJsonArray>(file_name, dataList) )
{
QMessageBox::information( nullptr, QStringLiteral("修改失败"), QStringLiteral("修改失败"));
}
}
}
});
color_buttons.insert(i, button_p);
}
第二步生成由QModelIndex
QModelIndex MissionModel::index(int row, int column, const QModelIndex &parent) const
{
if (column == 4)
{
return createIndex(row, column, color_buttons[row]);
}
else
return QAbstractTableModel::index(row, column, parent);
}
把按钮设置到界面table
QModelIndex index = mission_model->index(i, 4);
QPushButton *button = static_cast<QPushButton*>(index.internalPointer());
ui->tableView->setIndexWidget(index, button);