У меня проблема с QTabBar / QTabWidget. Вот как выглядит моя программа на данный момент, используя QTabBar:
Как видите, между QTabBar и QScrollArea есть некрасивая линия. Эта строка является частью фрейма QScrollArea, от которого я просто не могу избавиться, потому что это требуется с трех других сторон. Я понимаю, что мог бы использовать QTabWidget, но тогда мне нужно было бы создать виджет для каждой вкладки, что здесь неосуществимо: содержимое QScrollArea изменяется в соответствии с выбранной вкладкой, но есть только один виджет QScrollArea. (Дублирование его каждый раз при создании новой вкладки вызовет свои проблемы.)
Так кто-нибудь знает способ:
(i) сказать QScrollArea нарисовать рамку без верхней линии; или
(ii) использовать один и тот же виджет для каждой вкладки в QTabWidget?
Обновление 3 Для другого подхода см. Мой ответ ниже.
Обновление 1 Я выполнил предложение Звезди, и неприглядная строка исчезла:
Это улучшение. Но это не правильно. Посмотрите на промежутки между полосами прокрутки и границей. Справа два пикселя вместо одного; внизу это три пикселя. А зазор справа между границей QScrollArea и границей mainWidget на один пиксель слишком велик. Это связано с стилем границ QTabWidget, который я теряю в здравом уме, пытаясь измениться. Если я скажу:
MyTabWidget -> setStyleSheet ("QTabWidget::pane { margin: 0px,0px,0px,0px }") ;
тогда поля кажутся правильными, но границы исчезают:
Если я скажу:
MyTabWidget -> setStyleSheet ("QTabWidget::pane { "
" margin: 0px,0px,0px,0px;"
" border: 1px solid darkgray;"
"}") ;
тогда я почти вернулся к тому, с чего начал:
Если я попытаюсь исправить это с помощью:
ApplicationTabWidget -> setStyleSheet ("QTabWidget::pane { "
" margin: 0px,0px,0px,0px;"
" border: 1px solid darkgray;"
" border-top: 0px;"
"}") ;
потом опять меня высмеивают за мои боли:
Обновление 2 Если я забуду setStyleSheet
и просто включу documentMode
, вот что я получу:
Пожалуйста, кто-нибудь, скажите мне, что я глуп, и есть совершенно простое решение для всего этого.