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 @   阳光下的小土豆  阅读(1748)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示