QTableWidget: Как я могу получить более узкие линии с меньшим отступом по вертикали? - PullRequest
8 голосов
/ 01 февраля 2010

QTableWdiget великолепен для простых отображений сетки. Менять цвета, шрифты и т. Д. Несложно.

Однако мне не удалось придать сетке «более плотный» вид с меньшими вертикальными пробелами. Я вижу, что документация Qt говорит (например, здесь ) о

  • 1010 * запас *
  • 1012 * Граница *
  • обивка

вокруг виджетов, но когда я их устанавливаю, я получаю изменения только вокруг всего виджета сетки, а не внутри.

Как я могу установить это (с помощью таблицы стилей или жестко заданных опций) напрямую, чтобы сделать экран QTableWidget более плотным?

Ответы [ 5 ]

5 голосов
/ 16 февраля 2010

То, что вы ищете, имеет очень глупое решение, ИМХО, но оно работает.Вам необходимо установить элементы заголовков defaultSectionSize ().Доступ через вертикальный заголовок () и горизонтальный заголовок ().Я никогда не устанавливал ширину столбца с этим б / у, большинство моих проектов включают в себя добавление строк, а не столбцов, и я просто вызываю resizeColumnsToContents или выполняю изменение размера вручную.Однако строки утомительны.Я обычно получаю высоту шрифта, используя QFontMetrics, и добавляю 2. Любая последующая добавленная строка должна иметь эту высоту и вид viola: более узкий.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

Не проверенный код:

QFontMetrics fm( my_font );
int h = fm.height() + 2;
my_table->verticalHeader()->setDefaultSectionSize( h );
5 голосов
/ 07 марта 2010

Код, получающий 'h', может быть неправильным. Это был просто пример. Скопируйте и вставьте следующий довольно элементарный код. Измените значение в «setDefaultSectionSize ()», перекомпилируйте и запустите. Вы должны увидеть разницу. Установка этого значения в 10 или 50 дает видимые результаты. В приведенном выше коде возможно, что QFontMetrics или QFont что-то напутали.

Вы можете использовать все, что хотите, чтобы получить высоту, но размер шрифта имеет смысл.

#include <QtGui>

int main( int argc, char* argv[] )
{
 QApplication app( argc, argv );

 QDialog* my_dialog  = new QDialog();
 QHBoxLayout* layout  = new QHBoxLayout();
 QTableWidget* my_table_widget = new QTableWidget( my_dialog );

 my_table_widget->setRowCount( 10 );
 my_table_widget->setColumnCount( 10 );
 my_table_widget->verticalHeader()->setDefaultSectionSize( 15 );
 layout->addWidget( my_table_widget );
 my_dialog->setLayout( layout );
 my_dialog->resize( 500, 200 );
 my_dialog->show();

 return app.exec();
}

РЕДАКТИРОВАТЬ: я не знаю, как форматировать блок кода здесь ... прости меня. :)

Редактировать 2 : я исправил это, и следующий простой tighterTable.pro файл помогает вместе.

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

SOURCES += tighterTable.cpp    # if that is the filename

Спасибо большое жирное за это. Кстати: редактирование в виде кода - это просто отступ с четырьмя пробелами и / или нажатие кнопки с небольшим «101010» в строке форматирования.

3 голосов
/ 01 февраля 2010

QTableWidget - это удобная модель и вид. Как правило, метод data () QAbstractItemModel предоставляет SizeHintRole , который используется для представления представлению размера каждой ячейки.

Поскольку вы используете QTableWidget, я не думаю, что вы можете что-то сделать, чтобы изменить подсказку о размере, возвращаемую его внутренней моделью. Даже в документации по Qt ничего не упоминается в этой области.

0 голосов
/ 08 апреля 2019

Я попробовал все ответы здесь безуспешно.Что работало для меня, хотя было установить оба следующее.

    table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents)
    table->verticalHeader()->setMaximumSectionSize(10)
0 голосов
/ 07 июня 2017

QTableWidget -> verticalHeader -> setMinimumSectionSize () - правильный путь, и его можно установить в интерфейсе пользователя.

...