Add rolling adv

This commit is contained in:
kradchen
2023-09-08 11:42:42 +08:00
parent 64bac0e960
commit 7f19bc85f0
2 changed files with 60 additions and 48 deletions

View File

@@ -15,6 +15,7 @@ namespace {
const int LABEL_MARGIN_LEFT = 5; const int LABEL_MARGIN_LEFT = 5;
const int LABEL_FONT_WIDTH = 16; const int LABEL_FONT_WIDTH = 16;
const int MOVING_STEP = 2; const int MOVING_STEP = 2;
const char* HJ_TEXT="衡玖医疗科技——为女性提供更健康、更精准的乳腺诊断方案";
} }
RollingMessageWidget::RollingMessageWidget(QWidget *parent) RollingMessageWidget::RollingMessageWidget(QWidget *parent)
@@ -24,6 +25,9 @@ RollingMessageWidget::RollingMessageWidget(QWidget *parent)
{ {
this->setFixedHeight(36); this->setFixedHeight(36);
this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
mCurrentLabel->setText(HJ_TEXT);
QPoint p3 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP};
mCurrentLabel->move(p3);
} }
RollingMessageWidget::~RollingMessageWidget() { RollingMessageWidget::~RollingMessageWidget() {
@@ -32,40 +36,48 @@ RollingMessageWidget::~RollingMessageWidget() {
void RollingMessageWidget::timerEvent(QTimerEvent *e) { void RollingMessageWidget::timerEvent(QTimerEvent *e) {
if (!this->isVisible()) return; if (!this->isVisible()) return;
//滚动 if (mCurrentLabel->pos().x()> -450){
if (mRolling) { QPoint p1 = {mCurrentLabel->pos().x()-2,mCurrentLabel->pos().y()};
//end rolling, reset next mCurrentLabel->move(p1);
if (mRolledDistance == TOTAL_ROLL_DISTANCE){
mWaitStep = 0;
mRolling = false;
QPoint p3 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP};
mCurrentLabel->move(p3);
std::swap(mCurrentLabel, mNextLabel);
return;
}
//rolling
mRolledDistance += 2;
QPoint p1 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT - mRolledDistance, LABEL_MARGIN_TOP};
mNextLabel->move(p1);
if (p1.x() - mCurrentLabel->geometry().x() <= mCurrentLabel->width() + 20)
{
QPoint p2 = {mCurrentLabel->geometry().x() - MOVING_STEP, LABEL_MARGIN_TOP};
mCurrentLabel->move(p2);
}
return ;
} }
else{ else{
QPoint p3 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP};
//有等待的高优先级消息时,不停顿 mCurrentLabel->move(p3);
if (mWaitStep == WAIT_TIMES || (mWaitPriorityCount > 0 && mWaitStep == WAIT_TIMES / 3)){
mLocker.lock();
mNextLabel->setText(getNextMessage());
mNextLabel->setFixedWidth(mNextLabel->text().length() * LABEL_FONT_WIDTH);
mLocker.unlock();
} else{
mWaitStep++;
}
} }
// //滚动
// if (mRolling) {
// //end rolling, reset next
// if (mRolledDistance == TOTAL_ROLL_DISTANCE){
// mWaitStep = 0;
// mRolling = false;
// QPoint p3 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP};
// mCurrentLabel->move(p3);
// std::swap(mCurrentLabel, mNextLabel);
// return;
// }
// //rolling
// mRolledDistance += 2;
// QPoint p1 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT - mRolledDistance, LABEL_MARGIN_TOP};
// mNextLabel->move(p1);
// if (p1.x() - mCurrentLabel->geometry().x() <= mCurrentLabel->width() + 20)
// {
// QPoint p2 = {mCurrentLabel->geometry().x() - MOVING_STEP, LABEL_MARGIN_TOP};
// mCurrentLabel->move(p2);
// }
// return ;
// }
// else{
// //有等待的高优先级消息时,不停顿
// if (mWaitStep == WAIT_TIMES || (mWaitPriorityCount > 0 && mWaitStep == WAIT_TIMES / 3)){
// mLocker.lock();
// mNextLabel->setText(getNextMessage());
// mNextLabel->setFixedWidth(mNextLabel->text().length() * LABEL_FONT_WIDTH);
// mLocker.unlock();
// } else{
// mWaitStep++;
// }
// }
} }
void RollingMessageWidget::setMessageList(const QStringList &message) { void RollingMessageWidget::setMessageList(const QStringList &message) {
@@ -158,13 +170,13 @@ void RollingMessageWidget::initDelay()
mCurrentLabel->setFixedHeight(30); mCurrentLabel->setFixedHeight(30);
mCurrentLabel->show(); mCurrentLabel->show();
mCurrentLabel->move(p1); mCurrentLabel->move(p1);
mCurrentLabel->setText(tr("Message of warn!")); // mCurrentLabel->setText(tr("Message of warn!"));
mCurrentLabel->setFixedWidth(mCurrentLabel->text().length() * LABEL_FONT_WIDTH); mCurrentLabel->setFixedWidth(mCurrentLabel->text().length() * LABEL_FONT_WIDTH);
QPoint p2 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP}; QPoint p2 = {TOTAL_ROLL_DISTANCE + LABEL_MARGIN_LEFT, LABEL_MARGIN_TOP};
mNextLabel->setFixedHeight(30); mNextLabel->setFixedHeight(30);
mNextLabel->show(); mNextLabel->show();
mNextLabel->move(p2); mNextLabel->move(p2);
mNextLabel->setText(tr("Message2 of warn!")); // mNextLabel->setText(tr("Message2 of warn!"));
mNextLabel->setFixedWidth(mNextLabel->text().length() * LABEL_FONT_WIDTH); mNextLabel->setFixedWidth(mNextLabel->text().length() * LABEL_FONT_WIDTH);
mTimerId = startTimer(40); mTimerId = startTimer(40);
mInitFlag = true; mInitFlag = true;

View File

@@ -73,7 +73,7 @@ TopBarWidget::TopBarWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent,
l->setMargin(0); l->setMargin(0);
auto w = new RollingMessageWidget(this); auto w = new RollingMessageWidget(this);
w->setMessageList(GUIErrorLW::getWARNMessages()); // w->setMessageList(GUIErrorLW::getWARNMessages());
w->setObjectName("borderWidget"); w->setObjectName("borderWidget");
l->addWidget(w); l->addWidget(w);
connect(EventCenter::Default(), &EventCenter::ResponseDeviceTemperature, [=](QObject*, QObject* msg) { connect(EventCenter::Default(), &EventCenter::ResponseDeviceTemperature, [=](QObject*, QObject* msg) {
@@ -82,18 +82,18 @@ TopBarWidget::TopBarWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent,
QString* s = (QString*)msg; QString* s = (QString*)msg;
lockIcon->setText(QString("%1%2").arg(*s).arg(tr("°C"))); lockIcon->setText(QString("%1%2").arg(*s).arg(tr("°C")));
}); });
connect(EventCenter::Default(), &EventCenter::WarnStateFlagChange, [=](QObject*, QObject* msg) { // connect(EventCenter::Default(), &EventCenter::WarnStateFlagChange, [=](QObject*, QObject* msg) {
QVariant* var = (QVariant*)msg; // QVariant* var = (QVariant*)msg;
int v = var->toInt(); // int v = var->toInt();
int f = 0x00000001; // int f = 0x00000001;
for (int i = 0; i < 32; ++i) { // for (int i = 0; i < 32; ++i) {
int d = (f<<i); // int d = (f<<i);
if (d & v){ // if (d & v){
printf("warn %d, val:%d\r\n", i, v); // printf("warn %d, val:%d\r\n", i, v);
if (w)w->updateMessagePriority(i,1); // if (w)w->updateMessagePriority(i,1);
} else{ // } else{
if (w)w->updateMessagePriority(i,-1); // if (w)w->updateMessagePriority(i,-1);
} // }
} // }
}); // });
} }