2015-11-04 1 views
0

Я пытаюсь получить ширину qscrollbar, поскольку она изменяет видимость. Я делаю это, потому что я хочу изменить ширину моего qtablewidget по ширине qscrollbar, если она видна.Получить QScrollBar Width после изменения QScrollBar Видимость

Я использую сигнал rangeChanged(int min, int max) с моей панели qscrollbar. Если max > min, то отображается панель qscrollbar. Моя проблема заключается в том, что, когда я получаю ширину qscrollbar с использованием m_tableWidget->verticalScrollBar()->width(), значение не является текущей шириной, а скорее предыдущей шириной перед сигналом 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 в то время он становится видимым/невидимым?

ответ

1

Qt имеет лучший способ позаботиться о таком изменении размера азы какой-либо области контейнера виджета. Вы, вероятно, следует удалить весь код, который явно заботится о нем, и вместо того, чтобы добавить это:

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

И для этого класса таблицы виджета, имеет смысл перегрузить resizeEvent виртуальный метод, который будет запускаться при каждом изменение размера и сделать клетки отрегулируйте оттуда или resizeColumnsToContents().

+0

Я хочу, чтобы две вещи произошли в моей таблице: 1) Я хочу, чтобы ячейки таблицы плотно прилегали к их содержимому (результат, который я получаю от использования 'resizeColumnsToContents', и 2) Я хочу, чтобы ширина таблицы плотно прилегала к ширина горизонтального заголовка (т. е. пробел после последнего столбца и отсутствие горизонтальной полосы прокрутки). Установка политики размера для расширения не дает мне этих результатов. – Stanton

+0

Проблема должна быть разбита на части: 1) Как автоматически настроить размер внутреннего виджета. 2) Как настроить ячейки. Я считаю неправильным отклонять простейший и эффективный №1, потому что вы не поняли №2. Первоначально вопрос о №1. И я не могу сказать о # 2, пока я этого не делал, но в значительной степени сделал многое из остальных. – AlexanderVX

+0

Я уже понял, как настроить размеры ячеек по своему вкусу, используя 'resizeColumnsToContents'. Теперь мне просто нужно настроить ширину QTableWidget, чтобы она соответствовала общей ширине моих отображаемых данных. Я переживаю всю эту проблему, потому что мне не нравится, как вертикальная полоса прокрутки покрывает некоторые из моих прав большинства данных столбцов, когда она появляется. Я также скрыл горизонтальную полосу прокрутки, потому что у меня есть только два столбца для отображения. Я просто нуждаюсь в ширине вертикальной полосы прокрутки, поскольку мне кажется, что я должен закончить внешний вид. – Stanton