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

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

提前致谢,

查理

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

最佳答案

新答案

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

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

注意 :当这个逻辑索引存在时,即当定义这些列的模型附加到 View 时,调用 void QHeaderView::setResizeMode(int, ResizeMode) 很重要。

旧答案

QAbstractScrollArea 有 horizontalScrollBarPolicy 属性,可以有选项 ScrollBarAlwaysOff

尝试类似:
QAbstractScrollArea* scrollArea = // ???
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

关于qt - 如何防止 QAbstractScrollArea/QTableView 水平滚动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10297925/

10-09 05:59