Qt:关于tableWidget的几个问题(遇到再更新)

1. 表格中插入combobox以及文本居中的问题

网上查了好多资料都说很麻烦难实现,干脆自己写,其实也就那么几行!

void add_combobox(QTableWidget *table, int row, int column, QStringList textList, int currentIndex)
{
    QComboBox *combox = new QComboBox(); // 下拉选择框控件
    combox->setStyleSheet("color:#DCDCDC; background:#3C3C3C"); // 设置样式
    for (int i=0; icolumnWidth(column) - text.length()*6)/2/6; // 字体宽度6
        for (int i=0; iaddItem(text);
    }
    combox->setCurrentIndex(currentIndex);
    table->setCellWidget(row, column, (QWidget*)combox);
}

效果图:
Qt:关于tableWidget的几个问题(遇到再更新)_第1张图片

2.表格点击表头排序的问题

字符串排序没有太大的问题,当数字表示为字符串的时候会出现乱序。

void fill_table(QTableWidget *table, int row, QStringList column, QList unEditableColumn)
{
    table->insertRow(row);
    for (int i=0; isetTextAlignment(Qt::AlignCenter);
        if (IsDigitString(column.at(i)))  //判断是都是数字字符串
        {
            int num = QString(column.at(i)).toInt();
            item->setData(Qt::EditRole, QVariant(num)); //这里是数字排序的关键
        }
        else
        {
            item->setText(column.at(i));
        }
        if (unEditableColumn.contains(i))
        {
            item->setFlags(item->flags() & (~Qt::ItemIsEditable)); //设置是否可以编辑
        }
        table->setItem(row, i, item);
    }
}

然后再设计界面勾选此项:
Qt:关于tableWidget的几个问题(遇到再更新)_第2张图片
也可以在代码中设置:

void QTableWidget::setSortingEnabled(bool enable); //设置允许排序
void QTableWidget::sortByColumn(int column); //设置排序列
void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);

效果图:
在这里插入图片描述

3.表格中插入checkbox以及居中的问题

网上资料很多,直接上代码。

	...
	QWidget *widget = new QWidget;
	QHBoxLayout *layout = new QHBoxLayout;
	QCheckBox *ckb = new QCheckBox;
	ckb->setEnabled(false);
	layout->addWidget(ckb);
	layout->setMargin(0);
	layout->setAlignment(ckb,Qt::AlignCenter);
	widget->setLayout(layout);
	this->ui->table->setCellWidget(row, column, widget);
	...

效果图:
Qt:关于tableWidget的几个问题(遇到再更新)_第3张图片

你可能感兴趣的:(QT,table)