我试图获得qscrollbar的宽度,因为它会改变可见性。我这样做是因为我想将qtablewidget的宽度更改为qscrollbar的宽度(如果可见)。
我正在使用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);
}
有人知道如何在它变得可见/不可见时获得新的qscrollbar宽度吗?
答案 0 :(得分:1)
Qt有更好的方法来处理某些小部件容器区域的异步调整大小。您应该删除所有明确处理它的代码,而是添加:
// m_tableWidget constructed
// at least first parameter for horizontal sizing should be Expanding.
m_tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
对于那个表小部件类,重载resizeEvent虚拟方法是有意义的,该方法将在每次调整大小时触发,并从那里调整单元格或resizeColumnsToContents()
。