qtablewidget中添加按钮并信号槽

需要在cell中增加按钮。

 

 

主要代码(没写类名):

void InsertTableInfo(const QStringList &listInfo, bool bChecked)
{
    int nRowCount = ui->tableWidget->rowCount();
    ui->tableWidget->setRowCount(nRowCount + 1);
    ui->tableWidget->setRowHeight(nRowCount, 60);

    for(int i = 0; i < listInfo.size(); i++)
    {
        if(i == 9){//按钮所在列
            SetItem(ui->tableWidget, nRowCount, i + 1);
            continue;
        }
        QTableWidgetItem* item = new QTableWidgetItem(listInfo.at(i));
        item->setTextAlignment(Qt::AlignCenter);
        ui->tableWidget->setItem(nRowCount, i + 1, item);
    }
}

void SetItem(QTableWidget *table, int row, int column)
{
    QWidget* pWidget = new QWidget(table);
    QHBoxLayout *hLayout = new QHBoxLayout(pWidget); //创建布局
    QPushButton *pBtnDraw = new QPushButton(ui->tableWidget);
    QPushButton *pBtnModify = new QPushButton(ui->tableWidget);
    QPushButton *pBtnDelete = new QPushButton(ui->tableWidget);
    SetBtnStyle(pBtnDraw, "31,110,212", "绘制");
    SetBtnStyle(pBtnModify, "30,227,207", "修改");
    SetBtnStyle(pBtnDelete, "204,153,0", "删除");
    hLayout->addWidget(pBtnDraw);
    hLayout->addWidget(pBtnModify);
    hLayout->addWidget(pBtnDelete);
    hLayout->setContentsMargins(0, 0, 0, 0);//

    connect(pBtnDraw,SIGNAL(clicked()),this,SLOT(SlotBtnClicked()));  // 添加  按钮 点击处理
    connect(pBtnModify,SIGNAL(clicked()),this,SLOT(SlotBtnClicked()));
    connect(pBtnDelete,SIGNAL(clicked()),this,SLOT(SlotBtnClicked()));

    table->setCellWidget(row,column,pWidget);
}

void SetBtnStyle(QPushButton *pBtn, QString clr, QString btnTxt)//注意qstring clr的格式写法
{
    pBtn->setText(btnTxt);
    QString style = QString("QPushButton{min-height:40px;font-size:22px;color:rgb(255, 255, 255);background:rgba(%1,0.8);border:1px;border-radius:20px;padding:2px 2px;font-family:Microsoft YaHei;}"
    "QPushButton:hover{color:rgb(255, 255, 255);border-style:solid;background: rgba(%2,0.6);border-radius:20px;border:1px;font-family:Microsoft YaHei;}"
    "QPushButton:pressed{color:rgb(255, 255, 255);border-style:solid;border-radius:20px;background: rgba(%3,0.4);border:1px;font-family:Microsoft YaHei;}").arg(clr).arg(clr).arg(clr);
    pBtn->setStyleSheet(style);
}

void SlotBtnClicked()//槽函数
{
    QPushButton *senderObj = qobject_cast<QPushButton*>(sender());
    if (senderObj == nullptr)
    {
        return;
    }
    QModelIndex idx = ui->tableWidget->indexAt(QPoint(senderObj->parentWidget()->frameGeometry().x(), senderObj->parentWidget()->frameGeometry().y()));
    int row = idx.row();
    QString btnTxt = senderObj->text();
    if(btnTxt.compare("绘制") == 0){
        qDebug() << QString("按下第 %1 行 绘制 按钮").arg(row);
    }
    else if (btnTxt.compare("修改") == 0) {
        qDebug() << QString("按下第 %1 行 修改 按钮").arg(row);
    }
    else if (btnTxt.compare("删除") == 0) {
        qDebug() << QString("按下第 %1 行 删除 按钮").arg(row);
    }
    else {
        qDebug() << "错误";
    }
}

 

posted @ 2022-12-01 09:22  阳光下的小土豆  阅读(1639)  评论(0编辑  收藏  举报