QT开发中文网

Qt中QTableWidget实现如下功能:表格整个都为默认颜色,现在点击一行,需要记录当前行颜色,比如绿色,或默认颜色,但无论当前行什么颜色,被点击整行都变为灰色;此时再点击另一行,这一行也都变为灰色,但是上一行需要恢复之前记录的颜色,比如,绿色和白色c++

代码实现如下:

首先,在QTableWidget的构造函数中,设置整个表格的默认颜色:

MyTableWidget::MyTableWidget(QWidget *parent) : QTableWidget(parent)
{
    // 设置默认颜色
    QPalette palette;
    palette.setColor(QPalette::Base, Qt::white);
    setPalette(palette);
}

然后,在QTableWidget的行点击事件中,记录当前行的颜色,并将整行变为灰色:

void MyTableWidget::on_itemClicked(QTableWidgetItem *item)
{
    int row = item->row();

    // 记录当前行颜色
    QColor currentColor = item->background().color();

    // 将整行变为灰色
    for (int i = 0; i < columnCount(); i++) {
        QTableWidgetItem *item = this->item(row, i);
        if (item) {
            item->setBackground(Qt::gray);
        }
    }

    // 保存当前行颜色
    m_colorMap[row] = currentColor;
}

最后,在QTableWidget的重绘事件中,恢复被点击前的行颜色:

void MyTableWidget::paintEvent(QPaintEvent *event)
{
    QTableWidget::paintEvent(event);

    // 恢复之前记录的颜色
    for (auto it = m_colorMap.begin(); it != m_colorMap.end(); ++it) {
        int row = it.key();
        QTableWidgetItem *item = this->item(row, 0);
        if (item) {
            item->setBackground(it.value());
        }
    }
}

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1063

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?