2

次のコードを記述しました。

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

助けてください。

4

3 に答える 3

3

Qtのロジックはそうです。列のサイズを変更した後、スクロールバー領域が列がどのように収まるかをチェックします。また、すべての列の幅の合計がウィジェットの表示幅よりも小さい場合、最後の列のサイズが変更されてスペースがいっぱいになり、setColumnWidth()を呼び出しても表示されない結果になります。実際には、2つのサイズ変更が発生します。縮小と反転で拡大します。

したがって、レッスンは-コントロールの表示幅を取得し、必要に応じてサイズを再計算し、最後の列を除くすべてのサイズを変更します。2列の場合、それは本当に簡単です。

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

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

幸運を!

于 2010-07-07T14:20:42.870 に答える
3

最後の列ではなく、最初の列が残りのスペースを埋めるように指定することもできます。残念ながら、これにより、ユーザーが手動で列のサイズを変更できなくなるようです。

int secondColumnWidth = 100;
m_selectCategoryTableWidget->header()->setStretchLastSection(false);
m_selectCategoryTableWidget->header()->setResizeMode(0, QHeaderView::Stretch);
m_selectCategoryTableWidget->setColumnWidth(1, secondColumnWidth);
于 2011-06-15T13:36:19.650 に答える
0

これにより、列のサイズが自動的に合わせて変更されます(「ビュー」は、QTableView *であり、モデルは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);
    }
}
于 2011-06-16T03:27:31.760 に答える