QScrollBar изменяет размер стрелки - проблемы также с background-color - PullRequest
0 голосов
/ 08 января 2020

У меня Suse Linux Рабочий стол, на котором запущено приложение QT с QTextEdit. Во-первых, я хочу, чтобы виджет TextEdit имел серый фон или белый фон, в зависимости от глобального атрибута nightMode.

Но моя главная мысль заключается в том, что приложение предназначено для работы на сенсорном экране, таким образом, стрелки вверх и вниз должны быть больше. Чтобы воспроизвести программу, я создал только одно QT-приложение с MainWindow:

// mainwindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"

#include <QString>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    bool dayMode = false;
    ui->setupUi(this);

    // Already added a QTextEdit called "textEdit" in the *.ui file
    ui->textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

    QString nightModeString = dayMode ? "" : "QTextEdit {background-color: silver}";

    this->setStyleSheet("QScrollBar:vertical {\
                          width: 35px;\
                          background: grey;\
                          margin: 35px 0 35px 0;\
                        }"
                        "QScrollBar::up-arrow:vertical {\
                          image: url(:/resources/down-arrow.png);\
                        }"
                        "QScrollBar::down-arrow:vertical {\
                          image: url(:/resources/up-arrow.png);\
                        }"
                        "QScrollBar::add-line:vertical {\
                          background: gray;\
                          height: 35px;\
                          subcontrol-position: bottom;\
                          subcontrol-origin: margin;\
                        }"
                        "QScrollBar::sub-line:vertical {\
                          background: gray;\
                          height: 35px;\
                          subcontrol-position: top;\
                          subcontrol-origin: margin;\
                        }"
                        + nightModeString);
}

MainWindow::~MainWindow()
{
    delete ui;
}

Этот код имеет самую расширенную таблицу стилей, которую я пробовал. Всего я опробовал 6 разных стилей, но ни один из них не сработал так, как я ожидал. Я запутался в нескольких вещах:

  1. Стрелки вверх и вниз не отображаются. Но когда я изменяю только цвет фона самого QScrollBar, внезапно появляются стрелки.
  2. Стиль по умолчанию для широких полос прокрутки (как здесь, 35px) - это тот, который вы можете видеть справа на картинке с просто контурной ручкой. Но также это меняется на angular, когда я определяю цвет фона. И: стрелки вверх и вниз отображаются не со стилем по умолчанию Linux, а со знаком angular и windows.

Здесь вы можете увидеть все 6 Испытанные таблицы стилей

(рисунок) Вот код для 6 таблиц стилей (в том же порядке, что и изображения):

// [1]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                      margin: 35px 0 35px 0;\
                    }"
                    "QScrollBar::up-arrow:vertical,"
                    "QScrollBar::down-arrow:vertical {\
                      width: 10px; heigt: 10px;\
                    }"
                    "QScrollBar::add-line:vertical {\
                      height: 35px;\
                      subcontrol-position: bottom;\
                      subcontrol-origin: margin;\
                    }"
                    "QScrollBar::sub-line:vertical {\
                      height: 35px;\
                      subcontrol-position: top;\
                      subcontrol-origin: margin;\
                    }"
                    + nightModeString);
// [2]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                      margin: 35px 0 35px 0;\
                      background: gray;\
                    }"
                    "QScrollBar::up-arrow:vertical,"
                    "QScrollBar::down-arrow:vertical {\
                      width: 10px; heigt: 10px;\
                      background: white;\
                    }"
                    "QScrollBar::add-line:vertical {\
                      height: 35px;\
                      subcontrol-position: bottom;\
                      subcontrol-origin: margin;\
                    }"
                    "QScrollBar::sub-line:vertical {\
                      height: 35px;\
                      subcontrol-position: top;\
                      subcontrol-origin: margin;\
                    }"
                    + nightModeString);
// [3]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                      margin: 35px 0 35px 0;\
                      background: gray;\
                    }"
                    "QScrollBar::up-arrow:vertical,"
                    "QScrollBar::down-arrow:vertical {\
                      width: 10px; heigt: 10px;\
                      background: white;\
                    }"
                    "QScrollBar::add-line:vertical {\
                      height: 35px;\
                      subcontrol-position: bottom;\
                      subcontrol-origin: margin;\
                      background: white;\
                    }"
                    "QScrollBar::sub-line:vertical {\
                      height: 35px;\
                      subcontrol-position: top;\
                      subcontrol-origin: margin;\
                    }"
                    + nightModeString);
// [4]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                      margin: 35px 0 35px 0;\
                      background: gray;\
                    }"
                    "QScrollBar::up-arrow:vertical,"
                    "QScrollBar::down-arrow:vertical {\
                      width: 10px; heigt: 10px;\
                      background: white;\
                    }"
                    "QScrollBar::add-line:vertical {\
                      height: 35px;\
                      subcontrol-position: bottom;\
                      subcontrol-origin: margin;\
                      background: gray;\
                    }"
                    "QScrollBar::sub-line:vertical {\
                      height: 35px;\
                      subcontrol-position: top;\
                      subcontrol-origin: margin;\
                      background: gray;\
                    }"
                    + nightModeString);
// [5]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                      margin: 35px 0 35px 0;\
                      background: gray;\
                    }"
                    "QScrollBar::up-arrow:vertical,"
                    "QScrollBar::down-arrow:vertical {\
                      width: 10px; heigt: 10px;\
                      background: white;\
                    }"
                    + nightModeString);
// [6]
this->setStyleSheet("QScrollBar:vertical {\
                      width: 35px;\
                    }"
                    + nightModeString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...