qt5-入门-QTableWidget简单使用

参考:
C++ GUI Programming with Qt 4, Second Edition

本地环境:
win10专业版,64位,Qt5.12


效果

填充一个列表,在列表中点击“颜色”一列,可以选择颜色。
在这里插入图片描述

代码

头文件

增加一个私有变量和一个槽函数:

private:
    // 填充features页面,特征类型table
    void setFeaturesTableWidget();
    int featuresColorColIdx = 3; // 点击颜色列才能调出调色盘

private slots:
    // 这个格式的槽函数不用再写connect,是默认连接的
    void on_featuresTableWidget_cellClicked(int row, int col);

源文件

void PreferenceDialog::setFeaturesTableWidget() {
    QStringList featureNamesList = {}; // 放一些字符串,这里省略
    QStringList featureTypesList = {}; // 同上
    QStringList featureIsTransList = {}; // 同上
    QMap<QString, QColor> map = {{"promoter", QColor("#CB4335")}, ... }; // 省略内容
    int length = featureNamesList.length();
    // 设置行数,否则不显示内容
    featuresTableWidget->setRowCount(length);
    // 设置列宽
    featuresTableWidget->setColumnWidth(3, 50);
    for (int i = 0; i < length; i++) {
        QString actualName = featureNamesList[i];
        QTableWidgetItem* name = new QTableWidgetItem(actualName);
        QTableWidgetItem* type = new QTableWidgetItem(featureTypesList[i]);
        QTableWidgetItem* isTrans = new QTableWidgetItem(featureIsTransList[i]);
        featuresTableWidget->setItem(i, 0, name);
        featuresTableWidget->setItem(i, 1, type);
        featuresTableWidget->setItem(i, 2, isTrans);
        // 设置颜色按钮
        QColor color;
        QTableWidgetItem *item = new QTableWidgetItem();
        if (map.contains(actualName)) {
            color = map[actualName];
        } else {
            // 找不到的暂时用浅灰色
            color = QColor(Qt::lightGray);
        }
        item->setBackgroundColor(color);
        featuresTableWidget->setItem(i, 3, item);
    }
}

void PreferenceDialog::on_featuresTableWidget_cellClicked(int row, int col)
{
	// 只有点击了颜色列的单元格才可以打开颜色对话框
    if (col == featuresColorColIdx) {
    	// 打开颜色对话框,选择颜色
        QColor color = QColorDialog::getColor();
        if (color.isValid()) {
            QTableWidgetItem *item = new QTableWidgetItem();
            item->setBackgroundColor(color);
            // 修改颜色
            featuresTableWidget->setItem(row, col, item);
        }
    }
}

可能遇到的问题

只显示表头不显示内容

检查一下是不是没设置行数。

featuresTableWidget->setRowCount(length);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值