Frage

geschrieben habe den folgenden Code:

m_selectCategoryTableWidget = new QTableWidget;
m_selectCategoryTableWidget->setRowCount(0);
m_selectCategoryTableWidget->setColumnCount(2);

m_selectCategoryTableWidget->setHorizontalHeaderLabels(QStringList()<<tr("Category")<<tr("Number of items"));
m_selectCategoryTableWidget->verticalHeader()->setVisible(false);
m_selectCategoryTableWidget->horizontalHeader()->setStretchLastSection(true);
//m_selectCategoryTableWidget->setColumnWidth(0,400);
m_selectCategoryTableWidget->resizeColumnsToContents();
m_selectCategoryTableWidget->setColumnWidth(1,100); //this does not take effect

Bitte Hilfe.

War es hilfreich?

Lösung

Nun, Logik Qt ist so, dass nach Spalte Größe ändern, Bildlaufleiste Bereich überprüft, wie Spalten hineinpassen. Und wenn die Summe aller Breiten Spalten kleiner als die sichtbare Breite des Widgets, dann die letzte Spalte wird verkleinert den Raum ohne sichtbare Ergebnis führt zu füllen aufzurufen SetColumnWidth () . Eigentlich zwei Größenänderungen geschehen - schrumpfen und umgekehrt vergrößern

.

Die Lektion ist also - get Kontrolle der sichtbare Breite, neu zu berechnen Größen, wie Sie wollen, und die Größe alle, aber die letzte Spalte. Für zweispaltigen Fall ist es wirklich einfach:

int secondColumnWidth = 100;
int firstColumnWidth = m_selectCategoryTableWidget->width() - secondColumnWidth;

if (firstColumnWidth > 0)
{
    m_selectCategoryTableWidget->setColumnWidth(0, firstColumnWidth);
}
else
{
    m_selectCategoryTableWidget->resizeColumnsToContents();
}

Viel Glück!

Andere Tipps

Es ist auch möglich, festzulegen, dass Sie die erste Spalte wollen den verbleibenden Platz statt der letzten Spalte zu füllen. Leider dies scheint den Benutzer in der Lage zu verhindern, dass manuell die Größe der Spalten ändern.

int secondColumnWidth = 100;
m_selectCategoryTableWidget->header()->setStretchLastSection(false);
m_selectCategoryTableWidget->header()->setResizeMode(0, QHeaderView::Stretch);
m_selectCategoryTableWidget->setColumnWidth(1, secondColumnWidth);

Dies wird die Größe automatisch die Spalten zu passen ( „Ansicht“ ist ein QTableView * und Modell ist ein QSqlQueryModel *).

static_cast<QTableView*>(view)->horizontalHeader()
        ->resizeSections(QHeaderView::ResizeToContents);

QFontMetrics fm(view->font());

for (int i = 0 ; i < model->record().count(); ++i)
{
    int maxLength = 0;

    for (int j = 0; j < model->rowCount(); ++j)
    {
        QString cell = model->record(j).value(i).toString();

        if (fm.width(cell) > maxLength)
        {
            maxLength = fm.width(cell);
        }
    }
    QHeaderView& hv = *static_cast<QTableView*>(view)->horizontalHeader();

    if (maxLength > hv.sectionSize(i))
    {
        hv.resizeSection(i, maxLength * 1.5);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top