重写QHeaderView
重写HeaderView,然后设置到对应的tablewidget中去。
class CheckBoxHeaderView : public QHeaderView
{
Q_OBJECT
public:
CheckBoxHeaderView(int checkColumnIndex,
Qt::Orientation orientation,
QWidget * parent = 0) :
QHeaderView(orientation, parent)
{
// 默认ComboBox;
m_comboBox = new QComboBox(this);
m_comboBox->addItems(QStringList() << "123" << "456" << "789");
}
// 获取当前comboBox文字;
QString getCurrentComboBoxText()
{
return m_comboBox->currentText();
}
// 设置自定义ComboBox;
void setComboBoxObject(QComboBox* object)
{
m_comboBox = object;
m_comboBox->setParent(this);
}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
if (logicalIndex == 0)
{
m_comboBox->setGeometry(rect);
}
else
{
QHeaderView::paintSection(painter, rect, logicalIndex);
}
}
private:
QComboBox * m_comboBox;
};
测试
class MyTableWidgetWidthComboBox : public QTableWidget
{
Q_OBJECT
public:
MyTableWidgetWidthComboBox(QWidget *parent = Q_NULLPTR);
private:
CheckBoxHeaderView * m_checkBoxHeaderView;
};
MyTableWidgetWidthComboBox::MyTableWidgetWidthComboBox(QWidget *parent)
: QTableWidget(parent)
{
this->setAlternatingRowColors(true);
this->setColumnCount(3);
this->setSelectionMode(QAbstractItemView::SingleSelection);
this->setEditTriggers(QAbstractItemView::NoEditTriggers);
this->setSelectionBehavior(QAbstractItemView::SelectRows);
// 自定义表头
m_checkBoxHeaderView = new CheckBoxHeaderView(0, Qt::Horizontal, this);
// 自定义ComboBox;
QComboBox* comboBox = new QComboBox;
comboBox->addItems(QStringList() << "abc" << "def" << "789");
m_checkBoxHeaderView->setComboBoxObject(comboBox);
// 设置表头;
this->setHorizontalHeader(m_checkBoxHeaderView);
this->setHorizontalHeaderLabels(QStringList() << "1" << "2" << "3");
}