如何防止QAbstractScrollArea / QTableView水平滚动?

Cha*_*rly 4 qt qtableview qscrollarea

我有一个QTableView和其中的一些内容。我想要类似的行为,horizontalHeader() -> setResizeMode( ResizeToContent )但它不能创建水平滚动条-我的意思是视口一定不能比表格宽。

即使创建新的QHeaderView也不是一件容易的事,因为只有几种虚拟方法。

绘图以可视化问题

提前致谢,

查理

PS:我有一个自定义项目委托,它用“ ...”缩短了长文本。它以sizeHint()的形式返回完整大小,但是当paint()方法接收到较小的大小时(例如,使用resizeMode()== Qt :: Interactive模拟),它将裁剪内容。

Sil*_*ker 5

新答案

您需要在各个部分上设置拉伸,我创建了一个简单的测试应用程序:

测试屏幕截图

测试文件

#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();
}
Run Code Online (Sandbox Code Playgroud)

test.pro

QT += core gui
SOURCES=test.cpp
Run Code Online (Sandbox Code Playgroud)

注意:重要的一点void QHeaderView::setResizeMode(int, ResizeMode)是,当此逻辑索引存在时,即,将定义这些列的模型附加到视图时,应调用此方法。


旧答案

QAbstractScrollArea具有horizo​​ntalScrollBarPolicy属性,该属性可以具有选项ScrollBarAlwaysOff

尝试类似:

QAbstractScrollArea* scrollArea = // ???
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
Run Code Online (Sandbox Code Playgroud)