gpt4 book ai didi

c++ - 我怎样才能在可滚动的 QTableWidget 中有一个卡住的水平标题?

转载 作者:行者123 更新时间:2023-11-28 04:14:37 24 4
gpt4 key购买 nike

我正在为我的应用程序创建一个单列 QTableWidget (_tw)。我希望这个 QTableWidget 可以垂直和水平滚动。我隐藏了垂直标题,但我需要水平标题。问题是我无法获得“卡住”(对水平滚动不敏感)的水平标题,并且此标题的文本通常隐藏在滚动中。此外,在垂直滚动条之后,我可以看到水平标题的像素,这是不需要的。

我尝试以不同的方式解决这个问题,因为我已经努力让这个表格可以水平滚动。每次移动滚动条时,我都尝试重新定位标题,但没有成功。即使我失败了,这感觉更像是一种变通方法而不是解决方案。

_tw->setHorizontalScroolBarPolicy(Qt::ScrollBarAlwaysOn);
_tw->setHorizontalScroolMode(QAbstractItemView::ScrollPerPixel);
_tw->verticalHeader()->hide();
_tw->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
_tw->horizontalHeader()->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
_tw->horizontalHeader()->setFixedHeight(_headerHeight);
_tw->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);

_tw->horizontalHeader()->setFixedWitdh(_tableWidth);
_tw->setFixedWidth(_tableWidth);

_tw->setColumnWidth(0, _tableWidth + _offset);

我希望水平标题与表格宽度相同,并且不会滚动。目前情况并非如此:标题具有列的大小(比屏幕上显示的大)。由于标题文本水平对齐,因此不会显示并随滚动移动。

最佳答案

您可以尝试创建一个自定义类,将类似标题的区域应用于任何 QAbstractScrollArea(包括 QTableWidget)并在您的 tablewidget 上设置视口(viewport)边距。您不需要处理不滚动的 header ,但如果您需要一些类似 header 的行为,则需要手动执行。

未经测试的代码:

class Header: public QWidget
{
public:
Header(QAbstractScrollArea* parent=nullptr): QWidget(parent)
{
setFixedSize(parent->width(), 40);
}

virtual void paintEvent(QPaintEvent* event)
{
QPainter painter(this);
QFont font("Arial");
QFontMetrics fm(font);
QRect txtRect;
QString txt = "Header_name";
txtRect = fm.boundingRect(txt).trabslated(dx, dy);//translate it to position you want
painter.setFont(font);
painter.painter.drawText(txtRect, txt);
}
};

然后在你的 tablewidget 上设置视口(viewport)边距,像这样:

_tw->setViewportMargins(0, 40, 0, 0);

然后创建Header的实例:

Header *header = new Header(_tw);

如果此代码有效 - Romha Korev得到功劳。我从他对 this question 的回答中得到了这个想法。 .

希望这对您有所帮助。

关于c++ - 我怎样才能在可滚动的 QTableWidget 中有一个卡住的水平标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56946988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com