在 QScrollBar 可见性发生变化时获取 QScrollBar 宽度

Get QScrollBar Width upon change in QScrollBar Visibility

我正在尝试获取 qscrollbar 的宽度,因为它会改变可见性。我这样做是因为我想通过 q​​scrollbar 的宽度来改变我的 qtablewidget 的宽度,如果它是可见的话。

我正在使用来自我的 qscrollbar 的 rangeChanged(int min, int max) 信号。如果 max > min 则 qscrollbar 可见。我的问题是,当我使用 m_tableWidget->verticalScrollBar()->width() 获取 qscrollbar 宽度时,该值不是当前宽度,而是触发 rangeChanged 信号之前的前一个宽度。

这是我的信号槽连接的样子:

connect(m_tableWidget->verticalScrollBar(), SIGNAL(rangeChanged(int,int)),
        this, SLOT(verticalScrollBarChanged(int,int)));

这是槽函数:

void ImageTableWidget::verticalScrollBarChanged(int min, int max)
{
    int verticalScrollBarWidth = 0;
    if (max-min)
        verticalScrollBarWidth = m_tableWidget->verticalScrollBar()->width();

    int horizontalHeaderWidth = m_tableWidget->horizontalHeader()->length();
    m_tableWidget->setFixedWidth(verticalScrollBarWidth + horizontalHeaderWidth);
}

有谁知道我如何在它变成 visible/invisible 时获得新的 qscrollbar 宽度?

Qt 有更好的方法来处理某些小部件容器区域的这种异步调整大小。您可能应该删除所有明确处理它的代码,而是添加:

// m_tableWidget constructed
// at least first parameter for horizontal sizing should be Expanding. 
m_tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

并且对于 table 小部件 class 重载 resizeEvent 虚拟方法是有意义的,每次调整大小都会触发该方法并从那里调整单元格或 resizeColumnsToContents().