LINUX.ORG.RU

Ширина QTableWidget

 


0

1

Как получить ширину виджета QTableWidget? Сумма всех колонок не подоходит - ибо можно его растянуть так, чтобы они закончились и было пустое место или наоборот сжать до появления горизонтальной прокрутки.

.width() не работает - показывает 100, когда настоящая ширина ~713.

Смотрел в треде 2012го года - рабочего варианта нет.

Как у меня работает: есть .ui, в котором описан QTableWidget с 6ю колонками. В процессе работы ему динамически создаются ячейки, скрываются\показываются столбцы.

Мне нужно изменить ширину диалога по таблице. Делаю так:

void GUIGraphStat::slot_TABLE_RecalcSize()
{
    qint32 totalsize = 0;
    totalsize += tblStats->isColumnHidden(COL_NAME)      ? 0 : tblStats->columnWidth(COL_NAME);
    totalsize += tblStats->isColumnHidden(COL_MINIMUM)   ? 0 : tblStats->columnWidth(COL_MINIMUM);
    totalsize += tblStats->isColumnHidden(COL_MAXIMUM)   ? 0 : tblStats->columnWidth(COL_MAXIMUM);
    totalsize += tblStats->isColumnHidden(COL_MEAN)      ? 0 : tblStats->columnWidth(COL_MEAN);
    totalsize += tblStats->isColumnHidden(COL_RMS)       ? 0 : tblStats->columnWidth(COL_RMS);
    totalsize += tblStats->isColumnHidden(COL_DEVIATION) ? 0 : tblStats->columnWidth(COL_DEVIATION);

    totalsize += (this->width() - tblStats->width());
    this->setFixedWidth(totalsize);
}

Сам диалог выглядит так:

┌──────────────┐ - QDialog
│┌────────────┐│ // QTableWidget with buttons' layout
││QTableWidget││ //  in vertical layout
││            ││
││            ││
│└────────────┘│
│[btn]    [btn]│ // Buttons in horisontal layout
└──────────────┘

tblStats->width() возвращает 100. Должен около 713.

Как решить?

Уточняю - проблема, когда виджет еще не был показан. Если он уже был на экране - проблемы нет.

Уточняю - проблема, когда виджет еще не был показан

Есть showEvent, в нем и ресайзи.

panter_dsd ★★★★ ()
Последнее исправление: panter_dsd (всего исправлений: 1)
Ответ на: комментарий от sambist

Я бы согласился, если бы создавал эту штуку динамически, а не в редакторе ui форм.

А как по твоему элемент управления создается во время запуска программы? MOC пишет за тебя код, который создает твой виджет, помещает его в нужный parent и задает ему размеры и позицию. В зависимости от того, в какой момент вызывается твой обработчик resizeEvent, ты будешь получать разные результаты. Размер может быть совсем не тем, каким ты его ожидаешь увидеть. Для обработки отсекай случаи, когда твой виджет не был сделан хотя бы один раз видимым. Может быть тебе поможет ensurePolished(), но я не уверен.

m0rph ★★★★★ ()
Последнее исправление: m0rph (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.