QTableWidget的标题栏复选框

3
如何在QTableWidget标题栏上设置复选框。如何在QHeaderView中添加“全选”复选框。但是它不会显示复选框。
 QTableWidget* table = new QTableWidget();
 QTableWidgetItem *pItem = new QTableWidgetItem("All");
 pItem->setCheckState(Qt::Unchecked);
 table->setHorizontalHeaderItem(0, pItem);
2个回答

0

与上述解决方案不同,您可以简单地将 Push 按钮放在“全选”复选框的位置,并为其命名为“全选”。

因此,如果您按下“全选”按钮,则它被称为 Push 按钮并转到您随后移动到 Push 按钮(这里是“全选”)的任何位置。


0

在Qt Wiki上提到,目前没有快捷方式可以在表头中插入小部件,您需要自己子类化headerView。

以下是该维基答案的摘要:

“目前没有API可以在表头中插入小部件,但您可以自己绘制复选框以将其插入表头。

您可以子类化QHeaderView,重新实现paintSection(),然后在想要放置此复选框的部分使用PE_IndicatorCheckBox调用drawPrimitive()

您还需要重新实现mousePressEvent()以检测单击复选框的情况,以便绘制已选和未选状态。

下面的示例说明了如何完成此操作:

#include <QtGui>

class MyHeader : public QHeaderView
{
public:
  MyHeader(Qt::Orientation orientation, QWidget * parent = 0) : QHeaderView(orientation, parent)
  {}

protected:
  void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
  {
    painter->save();
    QHeaderView::paintSection(painter, rect, logicalIndex);  
    painter->restore();
    if (logicalIndex == 0)
    {
      QStyleOptionButton option;
      option.rect = QRect(10,10,10,10);
      if (isOn)
        option.state = QStyle::State_On;
      else
        option.state = QStyle::State_Off;
      this->style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter);
    }

  }
  void mousePressEvent(QMouseEvent *event)
  {
    if (isOn)
      isOn = false;
    else 
      isOn = true;
    this->update();
    QHeaderView::mousePressEvent(event);
  }
private:
  bool isOn;
};


int main(int argc, char **argv)
{
  QApplication app(argc, argv);
  QTableWidget table;
  table.setRowCount(4);
  table.setColumnCount(3);

  MyHeader *myHeader = new MyHeader(Qt::Horizontal, &table);
  table.setHorizontalHeader(myHeader);  
  table.show();
  return app.exec();
}

在表视图中,调用标题中的复选框没有其他替代方法吗? - Senthil Kumar
我们必须自己绘制复选框以进行设计,并且必须从表视图的标题中调用...谢谢,我将尝试使用此方法来实现复选框。 - Senthil Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接