【问题标题】:How to prevent QAbstractScrollArea / QTableView from horizontal scrolling?如何防止 QAbstractScrollArea / QTableView 水平滚动?
【发布时间】:2012-04-24 12:35:03
【问题描述】:

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

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

提前致谢,

查理

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

【问题讨论】:

    标签: qt qtableview qscrollarea


    【解决方案1】:

    新答案

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

    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 具有 horizontalScrollBarPolicy 属性,该属性可以具有选项 ScrollBarAlwaysOff

    尝试类似:

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

    【讨论】:

    • 使用ScrollBarAlwaysOff 有不同的效果。它只是隐藏了滚动条,但对列的大小没有影响——或者至少没有解决问题。
    • 同时将属性resizeMode 设置为ResizeToContentstretchLastSection 设置为true 怎么样?您可以在帖子中添加草图/绘图/模型来说明您想要实现的目标。
    • 好的,我准备一张图。 ResizeToContentstrechLastSection(true) 没有帮助...
    • 测试应用程序工作正常,我的“真正的应用程序”不起作用......但这是我自己可以弄清楚的。非常感谢!
    • 它不起作用,因为我一次设置了调整大小模式,没有附加模型 - 因此表有零列并且这些数据丢失了。我在您的回答中添加了这一点...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2023-03-18
    • 1970-01-01
    • 2015-08-09
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多