Domanda

Hanno scritto il seguente codice:

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

Si prega di aiuto.

È stato utile?

Soluzione

Bene, la logica di Qt è così, che dopo la colonna di ridimensionamento, di scorrimento controlli delle superfici bar come colonne si inseriscono in esso. E se la somma delle larghezze di tutte le colonne è minore larghezza visibile del widget, quindi l'ultima colonna viene ridimensionato per riempire lo spazio che porta a nessun risultato visibile di chiamare setColumnWidth () . In realtà due di ridimensionare capita - per ridurre e invertire per ingrandire

.

Quindi, la lezione è - larghezza visibile del controllo get, formati Ricalcola come si desidera, e ridimensionare tutti, ma l'ultima colonna. Per due casi colonna è davvero semplice:

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

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

In bocca al lupo!

Altri suggerimenti

E 'anche possibile specificare che si desidera che la prima colonna per riempire lo spazio rimanente invece che l'ultima colonna. Purtroppo questo sembra impedire all'utente di essere in grado di ridimensionare manualmente le colonne.

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

Questo ridimensiona automaticamente le colonne per adattarsi ( "vista" è un QTableView * e il modello è un 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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top