#include "backlightwidget.h" #include "ui_backlightwidget.h" #include "ibacklight.h" #include #include #include #include #include #include #include "systemmanager.h" BacklightWidget::BacklightWidget(QWidget *parent) : IWidget(parent), ui(new Ui::BacklightWidget), m_currentBacklight(NULL) { ui->setupUi(this); } BacklightWidget::~BacklightWidget() { delete ui; } void BacklightWidget::initUi() { this->createColowWidget(); QGuiApplication *app = dynamic_cast(qApp); if(!SystemManager::instance()->platformInfo().contains("noscreenname")) { foreach (QScreen *screen, app->screens()) { ui->comboBox->addItem(screen->name()); } }else{ foreach (Backlight *b, m_backlights) { ui->comboBox->addItem(b->screenName()); } } ui->textBrowser->append("screen information: "); connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &name){ foreach (Backlight *b, m_backlights) { qDebug()<< b->screenName() << "/" << name; if(b->screenName() == name){ if(m_currentBacklight != NULL && m_currentBacklight->screenName() != name) { m_currentBacklight->close(); } m_currentBacklight = b; ui->horizontalSlider->setEnabled(m_currentBacklight->open()); break; } } foreach (QScreen *screen, app->screens()) { QString screenName =screen->name(); if(SystemManager::instance()->platformInfo().contains("noscreenname")) { screenName = QString("%1x%2").arg(screen->size().width()).arg(screen->size().height()); } if(screenName == name){ ui->textBrowser->clear(); ui->textBrowser->append(QString("屏幕个数: %1").arg(app->screens().count())); ui->textBrowser->append(QString("屏幕像素分辨率: %1 X %2").arg( screen->size().width()).arg(screen->size().height())); ui->textBrowser->append(QString("屏幕可用大小(像素为单位): %1 X %2").arg( screen->availableSize().width()).arg(screen->availableSize().height())); ui->textBrowser->append(QString("每英寸的逻辑点或像素数: %1").arg( screen->logicalDotsPerInch())); ui->textBrowser->append(QString("屏幕的颜色深度): %1").arg( screen->depth())); ui->textBrowser->append(QString("垂直刷新率 Hz: %1").arg( screen->refreshRate())); break; } } }); QString screename; if(SystemManager::instance()->platformInfo().contains("noscreenname")) { if(m_backlights.size() >0){ screename = m_backlights.at(0)->screenName(); } }else{ screename =app->primaryScreen()->name(); } ui->comboBox->setCurrentText(screename); //更该下默认屏幕. ui->comboBox->currentTextChanged(screename); connect(app, &QGuiApplication::screenAdded, this, [=](QScreen *screen){ ui->textBrowser->append(QString("screen add: %1").arg(screen->name())); int index = ui->comboBox->findText(screen->name()); if(index !=-1) { ui->comboBox->removeItem(index); } }); connect(app, &QGuiApplication::screenRemoved, this, [=](QScreen *screen){ ui->textBrowser->append(QString("screen remove: %1").arg(screen->name())); int index = ui->comboBox->findText(screen->name()); if(index !=-1) { ui->comboBox->removeItem(index); } }); if(m_backlights.size() <=0) { ui->textBrowser->append("backling config is empty!"); } connect(ui->horizontalSlider, &SliderWidget::valueChanged, this, [=](int value){ if(m_currentBacklight != NULL) { m_currentBacklight->setValue(value); qCDebug(flapp)<<"set backligt value: "<< value; system("sync"); } ui->valueLbl->setText(QString::number(value)); }); if(m_currentBacklight != NULL) { int value = m_currentBacklight->getValue(); int min=0; int max=0; m_currentBacklight->getRange(min, max); ui->minLbl->setText(QString::number(min)); ui->maxLbl->setText(QString::number(max)); ui->horizontalSlider->blockSignals(true); ui->horizontalSlider->setRange(min, max); ui->horizontalSlider->setValue(value); ui->valueLbl->setText(QString::number(value)); ui->horizontalSlider->blockSignals(false); } } void BacklightWidget::createColowWidget() { int space = this->height()/32; ; ui->verticalLayout_4->setSpacing(space); auto createCircle = [=](QWidget *p, const QColor &color){ p->setFixedSize(38, 38); p->setAutoFillBackground(true); QPixmap pixmap(p->size()); QPainter painter(&pixmap); painter.setPen(color); painter.setRenderHint(QPainter::Antialiasing); QRect rect = p->rect(); rect =rect.adjusted(1,1,-1,-1); QPalette backPaalette= this->palette(); painter.fillRect(p->rect(), backPaalette.brush(QPalette::Background)); painter.setBrush(color); painter.drawEllipse(rect); QPalette palette = p->palette(); palette.setBrush(QPalette::Background, pixmap); p->setPalette(palette); }; createCircle(ui->redWidget, Qt::red); createCircle(ui->greenWidget, Qt::green); createCircle(ui->blueWidget, Qt::blue); } QString BacklightWidget::id() { return "screen"; } void BacklightWidget::loadData(const QDomElement &head, const QDomElement &body) { Q_UNUSED(body) Backlight *backlight; for(int i=0; iplatformInfo().contains("t507")) { backlight = new T507(devName, screenName, min, max); }else{ backlight = new Backlight(devName,screenName, min, max); } m_backlights << backlight; } }