如何调整QTableWidget的大小,使其不占用所有空间?

时间:2019-07-04 07:29:26

标签: c++ qt qt5 qtablewidget

我已经用Qt5制作了一个GUI:

enter image description here

但是右下角的表在右侧拉伸了“Pièce” QGroupBox。在将表添加到“Pièce”的内部布局之前,我已经调整了表的大小。

因为我不调整表的大小,所以具有以下GUI: enter image description here

这是没有表的接口:

enter image description here

我已经尝试在添加表格后更新“Pièce”布局,在将其添加到布局之前先更新表格,并也更新“客户端:不适用”标签。

// Return the "Pièce" QGroupBox
static QGroupBox* ajout_cadre_administratif(QWidget& page)
{
    QGroupBox* cadre_administratif = new QGroupBox(nom_section_piece);
    QVBoxLayout* support_principal = new QVBoxLayout(cadre_administratif);

    QHBoxLayout* support_client = ajouter_champs(titre_client.toStdString(), "N/A");
    support_principal->addLayout(support_client);

    QTableWidget* tableau = creation_tableau_references();
    support_principal->addWidget(tableau);

    support_client->update();

    support_principal->update();
    tableau->show();
    return cadre_administratif;
}

// Create the table and return it
static QTableWidget* creation_tableau_references()
{
    QTableWidget* table = new QTableWidget(0, 1);
    initialisation_tableau(*table);

    ajouter_element_tableau("STA-J915637925-B", *table);
    ajouter_element_tableau("STA-J015837049-A", *table);
    ajouter_element_tableau("STA-J915634923", *table);
    /*ajouter_element_tableau("STA-J965536925-B", *table);
    ajouter_element_tableau("STA-J915000001-B", *table);*/

    table->setFixedSize(taille_optimale_tableau(*table, 3));
    table->update();
    return table;
}

// add an item to the the table named "tableau"
void ajouter_element_tableau(const std::string& element, QTableWidget& tableau)
{
    QTableWidgetItem* item = new QTableWidgetItem(element.c_str());
    tableau.insertRow(tableau.rowCount());
    tableau.setItem(tableau.rowCount() - 1, 0, item);
}

// Init the table named "tableau"
static void initialisation_tableau(QTableWidget& tableau)
{
    tableau.horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    tableau.setEditTriggers(QAbstractItemView::NoEditTriggers);
    QStringList text(entete_tableau_references_piece);
    tableau.setHorizontalHeaderLabels(text);
    tableau.verticalHeader()->setVisible(false);
    tableau.setColumnCount(1);
}

// return the optimum size of the table
const QSize taille_optimale_tableau(QTableWidget& table, const short int nombre_lignes_maximum)
{
    int width = largeur_optimal(table, nombre_lignes_maximum);
    int height = hauteur_optimale(table, nombre_lignes_maximum);
    return QSize(width, height);
}

// return the optimum width of the table
static int largeur_optimal(QTableWidget& tableau, const short int nombre_lignes_maximum)
{
    int width = tableau.verticalHeader()->width();
    if(tableau.rowCount() <= nombre_lignes_maximum)
    {
        for(int i = 0; i < tableau.columnCount(); ++i)
        {
            width += tableau.columnWidth(i);
        }
    }
    else {
        for(int i = 0; i < nombre_lignes_maximum; ++i)
        {
            width += tableau.columnWidth(i);
        }
        width += tableau.verticalHeader()->sizeHint().width() + 3;
    }
    return width;
}

// return the optimum height of the table
static int hauteur_optimale(QTableWidget& tableau, const short int nombre_lignes_maximum)
{
    int height = tableau.horizontalHeader()->height();
    if(tableau.rowCount() <= nombre_lignes_maximum)
    {
        for(int i = 0; i < tableau.rowCount(); ++i)
        {
            height += tableau.rowHeight(i);
        }
        height += tableau.rowCount() - 1;
    }
    else {
        for(int i = 0; i < nombre_lignes_maximum; ++i)
        {
            height += tableau.rowHeight(i);
        }
        height += nombre_lignes_maximum - 1;
    }
    return height;
}

我想要这样的东西:

enter image description here

0 个答案:

没有答案