5

QTableViewとその中にいくつかのコンテンツがあります。次のような動作horizontalHeader() -> setResizeMode( ResizeToContent )が必要ですが、水平スクロールバーを作成してはなりません。つまり、ビューポートの幅をテーブルより広くしてはなりません。

新しいQHeaderViewを作成しても、仮想メソッドが少ないため、それほど簡単ではありません。

問題を視覚化するための描画

前もって感謝します、

チャーリー

PS:カスタムアイテムデリゲートがあります。これは、長いテキストを「...」で短縮します。sizeHint()としてフルサイズを返しますが、paint()メソッドが小さいサイズを受け取ると(たとえば、resizeMode()== Qt :: Interactiveでシミュレート)、コンテンツをトリミングします。

4

1 に答える 1

6

新しい答え

個々のセクションにストレッチを設定する必要があります。簡単なテストアプリを作成しました。

テストのスクリーンショット

test.cpp

#include <QtGui>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QStandardItemModel mdl(3, 3); // rows, cols
    mdl.setHorizontalHeaderLabels(QStringList() << "Name" << "Size" << "Date");
    mdl.setItem(0, 0, new QStandardItem("Short name"));
    mdl.setItem(0, 1, new QStandardItem("25kb"));
    mdl.setItem(0, 2, new QStandardItem("2011/07/05"));
    mdl.setItem(1, 0, new QStandardItem("This is a long name"));
    mdl.setItem(1, 1, new QStandardItem("25kb"));
    mdl.setItem(1, 2, new QStandardItem("2011/07/05"));
    mdl.setItem(2, 0, new QStandardItem("This is a long long long long name"));
    mdl.setItem(2, 1, new QStandardItem("25kb"));
    mdl.setItem(2, 2, new QStandardItem("2011/07/05"));


    QTableView view;
    view.setModel(&mdl);
    QHeaderView* hdr = view.horizontalHeader();
    hdr->setResizeMode(0, QHeaderView::Stretch);
    hdr->setResizeMode(1, QHeaderView::ResizeToContents);
    hdr->setResizeMode(2, QHeaderView::ResizeToContents);

    view.show();
    return app.exec();
}

test.pro

QT += core gui
SOURCES=test.cpp

注意void QHeaderView::setResizeMode(int, ResizeMode):この論理インデックスが存在する場合、つまり、これらの列を定義するモデルがビューにアタッチされている場合に呼び出されることが重要です。


古い答え

QAbstractScrollAreaには、オプションを持つことができるhorizo​​ntalScrollBarPolicyプロパティがありますScrollBarAlwaysOff

次のようなものを試してください:

QAbstractScrollArea* scrollArea = // ???
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

于 2012-04-24T13:04:11.007 に答える