마우스가 막대의 채워진 부분 위에있는 경우 QProgressBar
의 색 및/또는 텍스트 (형식)를 어떻게 변경 할 수 있습니까?채워진 막대 위의 마우스에서 QProgressBar의 색/텍스트 변경
내가 여러 서로 상단에 QProgressBar
의 이전에 비해 각각 보여주는 더 많은 콘텐츠 쌓여있다.
나는 마우스를 가져다 대면 마우스에서 여전히 가장 큰 줄을 선택하고 어떤 바 - 특정 텍스트를 보여주고 싶어요. 그러나 막대는 같은 크기이므로 막대의 채워진 영역을 인식하고 싶습니다. 마우스가 세 번째 줄에 걸쳐있는 경우
예컨대, 나는 세 번째 줄의 왼쪽 부분을 강조하고, 세 번째 줄에 특정 텍스트를 보여주고 싶어요.
class MultiProgressBar : public QWidget
{
Q_OBJECT
public:
MultiProgressBar(QWidget* parent = Q_NULLPTR) : QWidget(parent), layout(new QStackedLayout(this))
{
layout->setMargin(0);
layout->setStackingMode(QStackedLayout::StackAll);
}
void insertBar(QColor const& color)
{
auto bar = new QProgressBar();
bar->setTextVisible(false);
bar->setRange(0, 10000);
QPalette palette = this->palette();
palette.setColor(QPalette::Highlight, QColor(color.red(), color.green(), color.blue(), 100));
palette.setColor(QPalette::Base, QColor(color.red(), color.green(), color.blue(), 0));
bar->setPalette(palette);
layout->addWidget(bar);
progress_bars.push_back(bar);
}
public slots:
void setValues(const std::vector<int>& values, const std::vector<std::string>& names)
{
if (values.size() < progress_bars.size())
{
for (auto* widget : progress_bars)
{
layout->removeWidget(widget);
}
progress_bars.clear();
}
while (progress_bars.size() < values.size())
{
insertBar(QColor(0x46, 0xA1, 0xD9, 255));
}
for (auto i = 0; i < progress_bars.size(); ++i)
{
progress_bars[ i ]->setValue(values[ i ]);
// progress_bars[ i ]->setFormat(QString::fromStdString(names[ i ]));
}
}
private:
std::vector< QProgressBar* > progress_bars;
QStackedLayout* layout;
};
매력처럼 작동합니다. 나는 특히 detailled 고장과 의견을 좋아한다! – Trevir