Поместите текст QProgressBar снаружи - PullRequest
0 голосов
/ 21 июня 2020

На моем компьютере Windows текст отображается справа от индикатора выполнения.

progress bar on windows

On my Linux machine text appears in the middle of the progress bar.

progress bar on Linux with GTK+-based DE

If I apply style to progress bar, text appears inside on both systems. How do I get it to appear outside, like in default Windows style?

стилизованный индикатор выполнения

Вот упрощенная версия кода, который я использовал для работы с индикаторами выполнения:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    auto widget = new QWidget;

    auto layout1 = new QVBoxLayout;
    widget->setLayout(layout1);

    auto layout2 = new  QHBoxLayout;
    auto progressBar = new QProgressBar;
    auto spinBox = new QDoubleSpinBox;
    spinBox->setRange(0,100);
    spinBox->setDecimals(1);
    spinBox->setSingleStep(1);
    progressBar->setRange(0, 10000);
    connect(spinBox, qOverload<double>(&QDoubleSpinBox::valueChanged), progressBar,
            [spinBox, progressBar]
            {
                progressBar->setValue(spinBox->value() * 100);
                progressBar->repaint();
            });

    layout2->addWidget(spinBox);
    layout2->addWidget(progressBar);

    auto textEdit = new QPlainTextEdit;
    auto stylesheet = R"(
QProgressBar {
   background-color: cyan;
   border-radius: 1px;
   text-align: right;
}

QProgressBar::chunk {
   background-color: magenta;     
   border-radius: 1px;
}
)";
    textEdit->setPlainText(stylesheet);
    connect(textEdit, &QPlainTextEdit::textChanged, progressBar,
            [textEdit, progressBar]
            {
                progressBar->setStyleSheet(textEdit->toPlainText());
            });


    layout1->addLayout(layout2);
    layout1->addWidget(textEdit, 1);

    setCentralWidget(widget);
}
...