horizon rolling
This commit is contained in:
@@ -6,27 +6,19 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QShowEvent>
|
||||||
|
|
||||||
|
|
||||||
const int ROLL_DISTANCE = 32;
|
const int WAIT_TIMES = 60;
|
||||||
const int WAIT_TIMES = 30;
|
|
||||||
|
|
||||||
RollingMessageWidget::RollingMessageWidget(QWidget *parent) :QWidget(parent){
|
RollingMessageWidget::RollingMessageWidget(QWidget *parent) :QWidget(parent){
|
||||||
this->setFixedHeight(36);
|
this->setFixedHeight(36);
|
||||||
this->setFixedWidth(500);
|
// this->setMinimumWidth(1000);
|
||||||
|
|
||||||
|
this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
|
||||||
label_current = new QLabel(this);
|
label_current = new QLabel(this);
|
||||||
label_next = new QLabel(this);
|
label_next = new QLabel(this);
|
||||||
QPoint p1 = this->mapToGlobal({5,2});
|
|
||||||
label_current->setFixedSize(400, 30);
|
|
||||||
label_current->show();
|
|
||||||
label_current->move(p1);
|
|
||||||
label_current->setText(tr("Message of warn!"));
|
|
||||||
QPoint p2 = this->mapToGlobal({5,-30});
|
|
||||||
label_next->setFixedSize(400, 30);
|
|
||||||
label_next->show();
|
|
||||||
label_next->move(p2);
|
|
||||||
label_next->setText(tr("Message2 of warn!"));
|
|
||||||
timerId = startTimer(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RollingMessageWidget::timerEvent(QTimerEvent *e) {
|
void RollingMessageWidget::timerEvent(QTimerEvent *e) {
|
||||||
@@ -35,29 +27,34 @@ void RollingMessageWidget::timerEvent(QTimerEvent *e) {
|
|||||||
if (rolling) {
|
if (rolling) {
|
||||||
//end rolling, reset next
|
//end rolling, reset next
|
||||||
if (rollStep == ROLL_DISTANCE){
|
if (rollStep == ROLL_DISTANCE){
|
||||||
std::swap(label_current,label_next);
|
waitStep = 0;
|
||||||
rolling = false;
|
rolling = false;
|
||||||
QPoint p3 = this->mapToGlobal({5,-30});
|
QPoint p3 = {ROLL_DISTANCE+5,2};
|
||||||
p3.setX(label_next->geometry().x());
|
// p3.setY(label_next->geometry().y());
|
||||||
label_next->move(p3);
|
label_current->move(p3);
|
||||||
|
// printf("move last to 505,2\n");
|
||||||
|
std::swap(label_current,label_next);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//rolling
|
//rolling
|
||||||
QPoint p1 = label_current->geometry().topLeft();
|
rollStep+=2;
|
||||||
p1.setY(p1.y()+1);
|
QPoint p1 = {ROLL_DISTANCE+5 - rollStep,2};
|
||||||
label_current->move(p1);
|
label_next->move(p1);
|
||||||
QPoint p2 = label_next->geometry().topLeft();
|
if (p1.x()-label_current->geometry().x()<=label_current->width()+20)
|
||||||
p2.setY(p2.y()+1);
|
{
|
||||||
label_next->move(p2);
|
QPoint p2 = {label_current->geometry().x()-2,2};
|
||||||
rollStep++;
|
label_current->move(p2);
|
||||||
|
}
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
||||||
//有等待的高优先级消息时,不停顿
|
//有等待的高优先级消息时,不停顿
|
||||||
if (waitStep == WAIT_TIMES || waitPriorityCount > 0){
|
if (waitStep == WAIT_TIMES || (waitPriorityCount > 0 && waitStep == WAIT_TIMES/3)){
|
||||||
locker.lock();
|
locker.lock();
|
||||||
label_next->setText(getNextMessage());
|
label_next->setText(getNextMessage());
|
||||||
|
label_next->setFixedWidth(label_next->text().length()*16);
|
||||||
locker.unlock();
|
locker.unlock();
|
||||||
} else{
|
} else{
|
||||||
waitStep++;
|
waitStep++;
|
||||||
@@ -144,3 +141,26 @@ QString RollingMessageWidget::getNextMessage() {
|
|||||||
waitStep = 0;
|
waitStep = 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RollingMessageWidget::showEvent(QShowEvent *event) {
|
||||||
|
QWidget::showEvent(event);
|
||||||
|
if (!init)
|
||||||
|
{
|
||||||
|
ROLL_DISTANCE = this->width();
|
||||||
|
QPoint p1 = {5,2};
|
||||||
|
label_current->setFixedHeight(30);
|
||||||
|
label_current->show();
|
||||||
|
label_current->move(p1);
|
||||||
|
label_current->setText(tr("Message of warn!"));
|
||||||
|
label_current->setFixedWidth(label_current->text().length()*16);
|
||||||
|
QPoint p2 = {ROLL_DISTANCE+5,2};
|
||||||
|
label_next->setFixedHeight(30);
|
||||||
|
label_next->show();
|
||||||
|
label_next->move(p2);
|
||||||
|
label_next->setText(tr("Message2 of warn!"));
|
||||||
|
label_next->setFixedWidth(label_next->text().length()*16);
|
||||||
|
|
||||||
|
timerId = startTimer(40);
|
||||||
|
init = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,8 +27,10 @@ public:
|
|||||||
explicit RollingMessageWidget(QWidget *parent = nullptr);
|
explicit RollingMessageWidget(QWidget *parent = nullptr);
|
||||||
void setMessageList(const QStringList& message);
|
void setMessageList(const QStringList& message);
|
||||||
void updateMessagePriority(int innerIndex, int priority);
|
void updateMessagePriority(int innerIndex, int priority);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void timerEvent(QTimerEvent* event) override ;
|
void timerEvent(QTimerEvent* event) override ;
|
||||||
|
void showEvent(QShowEvent *event) override ;
|
||||||
QString getNextMessage();
|
QString getNextMessage();
|
||||||
private:
|
private:
|
||||||
int timerId = -1;
|
int timerId = -1;
|
||||||
@@ -41,6 +43,8 @@ private:
|
|||||||
QLabel* label_next = nullptr;
|
QLabel* label_next = nullptr;
|
||||||
QList<WarnMessage> messages;
|
QList<WarnMessage> messages;
|
||||||
QMutex locker;
|
QMutex locker;
|
||||||
|
bool init = false;
|
||||||
|
int ROLL_DISTANCE=2000;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user