У меня 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 разных стилей, но ни один из них не сработал так, как я ожидал. Я запутался в нескольких вещах:
- Стрелки вверх и вниз не отображаются. Но когда я изменяю только цвет фона самого QScrollBar, внезапно появляются стрелки.
- Стиль по умолчанию для широких полос прокрутки (как здесь, 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);