我有一个QTableView及其中的一些内容。我想要像horizontalHeader() -> setResizeMode( ResizeToContent )
这样的行为,但它不能创建水平滚动条 - 我的意思是视口不能比表格宽。
即使创建了新的QHeaderView,也不是那么容易,因为只有少数虚拟方法。
提前致谢,
查理
PS:我有一个自定义项目委托,它用“...”缩短长文本。它返回sizeHint()作为完整大小,但是当paint()方法接收到较小的大小时(例如使用resizeMode()= Qt :: Interactive模拟),它会裁剪内容。
答案 0 :(得分:4)
新答案
您需要在各个部分设置拉伸,我已经创建了一个简单的测试应用程序:
<强> 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);