Qt4 QTableView:双击列标题调整所有列的大小

Qt4 QTableView:双击列标题调整所有列的大小,qt4,Qt4,在单列标题的边缘双击时,该列的大小将调整为适合内容。 如果选择多个列,当双击任何选定列标题的边缘时,如何调整所有选定列的大小 将一些插槽连接到QHeaderView::sectionHandleDoubleClicked信号 在该插槽中获取所选列 使用QHeaderView::setResizeMode和QHeaderView::ResizeToContents自动调整它们的大小 获取新的绝对列大小 将列大小调整模式恢复为QHeaderView::Interactive或其他任何模式 使用QHe

在单列标题的边缘双击时,该列的大小将调整为适合内容。 如果选择多个列,当双击任何选定列标题的边缘时,如何调整所有选定列的大小

  • 将一些插槽连接到
    QHeaderView::sectionHandleDoubleClicked
    信号
  • 在该插槽中获取所选列
  • 使用
    QHeaderView::setResizeMode
    QHeaderView::ResizeToContents
    自动调整它们的大小
  • 获取新的绝对列大小
  • 将列大小调整模式恢复为
    QHeaderView::Interactive
    或其他任何模式
  • 使用
    QHeaderView::resizeSection
    设置新的绝对列大小
  • 例如:

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        QStandardItemModel *model = new QStandardItemModel(this);
        for (int i = 0; i < 10; ++i)
        {
            QList<QStandardItem*> items;
            for (int j = 0; j < 4; ++j)
            {
                QStandardItem *item = new QStandardItem;
                QChar ch = QString::number(j).at(0);
                item->setText(QString().fill(ch, 20));
    
                items << item;
            }
    
            model->appendRow(items);
        }
    
        view = new QTableView;
        view->setModel(model);
    
        connect(view->horizontalHeader(), SIGNAL(sectionHandleDoubleClicked(int)),
                this, SLOT(sectionHandleDoubleClicked(int)));
    
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(view);
    }
    
    void Widget::sectionHandleDoubleClicked(int logicalIndex)
    {
        QHeaderView *header = view->horizontalHeader();
    
        QModelIndexList list = view->selectionModel()->selectedIndexes();
    
        QSet<int> columns;
        Q_FOREACH (QModelIndex index, list)
        {
            if (index.isValid())
            {
                columns.insert(index.column());
            }
        }
    
        Q_FOREACH (int column, columns)
        {
            header->setResizeMode(column, QHeaderView::ResizeToContents);
            int newWidth = header->sectionSize(column);
            header->setResizeMode(column, QHeaderView::Interactive);
            header->resizeSection(column, newWidth);
        }
    }
    
    Widget::Widget(QWidget*parent)
    :QWidget(父项)
    {
    QStandardItemModel*model=新的QStandardItemModel(本);
    对于(int i=0;i<10;++i)
    {
    QList项目;
    对于(int j=0;j<4;++j)
    {
    QStandardItem*项=新QStandardItem;
    QChar ch=QString::number(j).at(0);
    item->setText(QString().fill(ch,20));
    项目行(项目);
    }
    视图=新的QTableView;
    查看->设置模型(模型);
    连接(视图->水平标题(),信号(截面处理双击(int)),
    这个插槽(sectionHandleDoubleClicked(int));
    QVBoxLayout*layout=新的QVBoxLayout(本);
    布局->添加小部件(视图);
    }
    void小部件::sectionHandleDoubleClicked(int-logicalIndex)
    {
    QHeaderView*header=视图->水平标题();
    QModelIndexList=view->selectionModel()->selectedIndex();
    QSet柱;
    Q_FOREACH(QModelIndex索引,列表)
    {
    if(index.isValid())
    {
    columns.insert(index.column());
    }
    }
    Q_FOREACH(int列,列)
    {
    标题->setResizeMode(列,QHeaderView::ResizeToContents);
    int newWidth=header->sectionSize(列);
    标题->setResizeMode(列,QHeaderView::Interactive);
    标题->调整大小部分(列,新宽度);
    }
    }