【问题标题】:How to center a widget in QScrollArea?如何在 QScrollArea 中居中小部件?
【发布时间】:2018-03-11 20:35:05
【问题描述】:

构造函数:

ScrollArea::ScrollArea(...)
{
    ...
    end = myItems.count();
    for(int i=0; i<end; i++)
    {
        scrollItems.append(new ScrollItem(myItems.at(i), 0, width, i, this));
    }
    scrollArea->setWidget(this);    //must be last for auto-scrolling to work
}

会员功能:

void ScrollArea::updateSelection(int selection)
{
    foreach(ScrollItem* item, scrollItems)
    {
        if(item->updateSelection(selection, 0))
        {
            scrollArea->ensureWidgetVisible(item);
        }
    }
}

运行ScrollArea::updateSelection后是这样的:

我希望它看起来像这样:

Google 返回一个标题错误的问题(据我所知:Place widget in center of QScrollArea)和一堆垃圾。

【问题讨论】:

    标签: c++ qt graphics


    【解决方案1】:

    仍然不知道为什么 QScrollArea::ensureWidgetVisible 不起作用,即使有明确的边距,但我发现了一些可以做的事情:

    void ScrollArea::updateSelection(int selection)
    {
        int item = -1;
    
        int i = scrollItems.count();
        while(i)
        {
            i--;
            if(scrollItems.at(i)->updateSelection(selection, 0))
            {
                item = i;
            }
        }
    
        if(item < 0)
        {
            return;
        }
    
        i = scrollItems.first()->height();
        item *= i;
        item += i / 2;
        //item is now the position that should be centered
    
        scrollArea->verticalScrollBar()->setValue(
                    item - (scrollArea->height() / 2)
                    );
    }
    

    所以我基本上是暴力破解我想要的东西,而不是让图书馆去做。 (失败)

    【讨论】:

    • 我很高兴你和verticalScrollBar()-&gt;setValue一起解决了这个问题。
    猜你喜欢
    • 2019-05-11
    • 2014-03-08
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多