12

私は学生プログラマーであり、Qtを使用して作業用のGUIインターフェイスを構築しています。私はQTreeWidget合計8列です。これらの各列に入力する必要のある入力はかなり小さいです。その点で、私はすべての列のサイズを必要最小限のスペースに変更する方法を見つけようとしていました。仕切りをクリックしたときに実行されるアクションとよく似ています。いくつかのWebサイトとQtのドキュメントを調べましたが、解決策が見つかりませんでした。ドキュメントを調べた後、これを行う方法はたくさんあるようですが、私はそれを機能させることができません。どこかで何かを有効/無効にする必要があると思い始めています。これは、ビルド関数に書き込んだ変更のようです(この関数はテーブルをクリアします。ベクターからデータを読み取り、テーブルに特定のデータを表示します。次に、ヘッダー/列のサイズを、列の内容に合わせてちょうど十分なサイズに変更するとします)は適用されません。私は変更なしで以下を試しました:

        ui->treeWidgetInjections->setColumnWidth(i, minimumWidth());
        ui->treeWidgetInjections->resizeColumnToContents(i);
        ui->treeWidgetInjections->header()->ResizeToContents;
        ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth());

これらはすべて私のビルド関数の最後にあります(無関係な情報は削除されました):

ui->treeWidgetInjections->clear();
    for (int i=0; i < qTreeInjectionData.size(); i++)
        {
            //fill Qtree with items;
            //fill QTree items with data;
            //re size function here;
        }

私はこの課題を学び、克服することにのみ興味があるので、生産的なフィードバックのみを残してください。前もって感謝します!

4

2 に答える 2

24

この最小限の例は私のために働きます:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout = new QVBoxLayout(centralWidget());
    QTreeWidget *tree = new QTreeWidget(this);
    layout->addWidget(tree);

    tree->setColumnCount(3);

    QStringList first, second, third;
    first  << "xxxxxxxxx"      << "xxxxxxxxxxxxx"     << "xxxxxxxx";
    second << "xxxxx"          << "xxxxxxxxxxxxxxxxx" << "xxxxx";
    third  << "xxxxxxxxxxxxxx" << "xxxxxxxxxx"        << "xxxxxxxx";

    tree->insertTopLevelItem(0, new QTreeWidgetItem(first));
    tree->insertTopLevelItem(0, new QTreeWidgetItem(second));
    tree->insertTopLevelItem(0, new QTreeWidgetItem(third));

    for(int i = 0; i < 3; i++)
        tree->resizeColumnToContents(i);
}

resizeColumnToContents()ビューにデータを入力した後、列ごとに1回メソッドを呼び出すだけです。問題が解決しない場合はお知らせください。

于 2012-01-24T23:45:46.267 に答える
17

私にとっての問題はStretchLastSection、trueに設定されていて、この値がtrueに設定されている場合、このプロパティはヘッダーの最後のセクションで設定されたサイズ変更モードをオーバーライドすることでした。

解決:

_treeWidget = new UIWidgetSceneTree();
_treeWidget->header()->setStretchLastSection(false);
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
于 2016-05-31T06:21:21.673 に答える