From 78c7005f1c325ea3ecf9837aa06659f562435381 Mon Sep 17 00:00:00 2001 From: Krad Date: Wed, 12 Jan 2022 18:04:47 +0800 Subject: [PATCH] horizon rolling --- src/components/RollingMessageWidget.cpp | 72 ++++++++++++++++--------- src/components/RollingMessageWidget.h | 4 ++ src/stylesheet/Dark2.css | 2 +- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/components/RollingMessageWidget.cpp b/src/components/RollingMessageWidget.cpp index e6288f2..3f96d82 100644 --- a/src/components/RollingMessageWidget.cpp +++ b/src/components/RollingMessageWidget.cpp @@ -6,27 +6,19 @@ #include #include #include +#include -const int ROLL_DISTANCE = 32; -const int WAIT_TIMES = 30; +const int WAIT_TIMES = 60; RollingMessageWidget::RollingMessageWidget(QWidget *parent) :QWidget(parent){ this->setFixedHeight(36); - this->setFixedWidth(500); +// this->setMinimumWidth(1000); + + this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); label_current = 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) { @@ -35,29 +27,34 @@ void RollingMessageWidget::timerEvent(QTimerEvent *e) { if (rolling) { //end rolling, reset next if (rollStep == ROLL_DISTANCE){ - std::swap(label_current,label_next); + waitStep = 0; rolling = false; - QPoint p3 = this->mapToGlobal({5,-30}); - p3.setX(label_next->geometry().x()); - label_next->move(p3); + QPoint p3 = {ROLL_DISTANCE+5,2}; +// p3.setY(label_next->geometry().y()); + label_current->move(p3); +// printf("move last to 505,2\n"); + std::swap(label_current,label_next); return; } //rolling - QPoint p1 = label_current->geometry().topLeft(); - p1.setY(p1.y()+1); - label_current->move(p1); - QPoint p2 = label_next->geometry().topLeft(); - p2.setY(p2.y()+1); - label_next->move(p2); - rollStep++; + rollStep+=2; + QPoint p1 = {ROLL_DISTANCE+5 - rollStep,2}; + label_next->move(p1); + if (p1.x()-label_current->geometry().x()<=label_current->width()+20) + { + QPoint p2 = {label_current->geometry().x()-2,2}; + label_current->move(p2); + } + return ; } else{ //有等待的高优先级消息时,不停顿 - if (waitStep == WAIT_TIMES || waitPriorityCount > 0){ + if (waitStep == WAIT_TIMES || (waitPriorityCount > 0 && waitStep == WAIT_TIMES/3)){ locker.lock(); label_next->setText(getNextMessage()); + label_next->setFixedWidth(label_next->text().length()*16); locker.unlock(); } else{ waitStep++; @@ -144,3 +141,26 @@ QString RollingMessageWidget::getNextMessage() { waitStep = 0; 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; + } +} diff --git a/src/components/RollingMessageWidget.h b/src/components/RollingMessageWidget.h index 33814d9..e67d3e5 100644 --- a/src/components/RollingMessageWidget.h +++ b/src/components/RollingMessageWidget.h @@ -27,8 +27,10 @@ public: explicit RollingMessageWidget(QWidget *parent = nullptr); void setMessageList(const QStringList& message); void updateMessagePriority(int innerIndex, int priority); + protected: void timerEvent(QTimerEvent* event) override ; + void showEvent(QShowEvent *event) override ; QString getNextMessage(); private: int timerId = -1; @@ -41,6 +43,8 @@ private: QLabel* label_next = nullptr; QList messages; QMutex locker; + bool init = false; + int ROLL_DISTANCE=2000; }; diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index 8c5d6df..78d0d48 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -1 +1 @@ - /*------1.silver-->grey--------------------------*/ *{background-color:#3c3c3c; color:#fcfcfc;margin:0;font-size:16px;} QTabBar::tab { height:60px; width:300px; font-size: 25px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #505050, stop: 1.0 #333333); border: 2px solid #505050; border-bottom-left-radius: 50%; border-bottom-right-radius: 50%; min-width: 8ex; padding: 2px; } QTabBar::tab:selected, QTabBar::tab:hover { border-top:5px solid #4a88c7; background: #505050;} QTabWidget::pane{margin:0} QPlainTextEdit{border:0px} QGroupBox{border:0px} QLabel{color:#fcfcfc; font-weight:bold; font-size:16px;} QLineEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QLineEdit:enabled{background-color: #505050;color:#fcfcfc;} QDateEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QDateEdit:enabled{background-color: #505050;color:#fcfcfc;} QTextEdit{ border:1px solid #505050;color:grey;border-radius:3px;} QTextEdit:enabled{background-color: #505050;color:#fcfcfc;} QComboBox{text-align:center;min-height:36px;max-height:36px; border:1px solid #505050} QComboBox:enabled{background-color: #505050} QComboBox::drop-down{width:20px} QComboBox QAbstractItemView{min-width:120px;} QComboBox QAbstractItemView::item {min-height:60px;max-height:60px; border:1px solid white;} QWidget QToolButton#showeditBtn{border-top:1px solid darkgray;border-bottom:1px solid darkgray;border-left:1px solid darkgray;border-radius: 0;border-bottom-left-radius:10px;background: #505050;font-size:20px;font-weight:normal; } QWidget QToolButton#hideeditBtn{border-top:1px solid darkgray;border-bottom:1px solid darkgray;border-left:1px solid darkgray;border-radius: 0;border-top-left-radius:10px;border-bottom-left-radius:10px;background: #505050;font-size:20px;font-weight:normal; } QWidget QToolButton{border:none;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget QToolButton:disabled{color:#606060;} QWidget QToolButton:hover{background:#505050;} QWidget QToolButton:checked{border:5px solid darkorange;padding:0px;} QPushButton{border:1px solid #505050 ;padding-left:50px;padding-right:50px; border-radius:5px; min-height:28px; max-height:28px; background:qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #505050, stop:1 #606060);} QListView{border:none;margin:5px; font-weight:bold} QListView::item{background:#4d4d4d;min-height:30px; border:1px solid #505050; border-radius:5px} QListView::item:selected{background:#365880;font-weight:bold;color:#fcfcfc;} /*QListView::item:selected{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ABAFE5, stop: 1 #8588B2); border:1px solid #505050; }*/ QHeaderView::section{background-color:#595959;min-height:50px;max-height:50px;font-weight:Bold; font-size:16px; border:1px solid #323232;} QHeaderView::section:horizontal{border-bottom: 1px solid rgb(0,170,255);} QHeaderView::section:vertical{min-height:36px;max-height:36px;} QTableView{border:none;alternate-background-color: #595959;selection-color:#fcfcfc;selection-background-color:#0078d8} /*-----------Specific---------------*/ QLabel#sliderPickerLabel{color:grey;padding:0;background:#505050;font-weight:normal;font-size:50px;} QWidget#topbarWidget{min-height:36px;max-height:36px;} QWidget#contentWidget{border-top:1px solid #505050;} QWidget#commandWidget{min-height:123px;max-height:123px;border-top:1px solid #505050; border-bottom:1px solid #323232;} QLabel#logo{min-width:30px;max-width:30px} QLabel#company{min-width:150px;max-width:150px; } QLabel#systemMsgBar{min-width:500px;} QLabel#warn{color:#CCCC00;background:transparent;font-size:20px;} QWidget QWidget#statusBarWidget{min-width:300px;} QToolButton#btn_main{border:2px solid #0078d8;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget#editcmdWidget{min-height:83px;max-height:83px;} QWidget#verSpaceLine{ border-right:1px solid #0078d8;} QWidget#topBottomLine{ border-top:2px solid #0078d8;border-bottom:2px solid #0078d8;background:transparent;} /*-----Settings*/ QPushButton#BigBtn{ padding-left:0px; padding-right:0px; min-height:60px; max-height:60px; min-width:140px; max-width:140px; font-size: 20px; font-weight:bold; } /*-----蒙版Dialog-----*/ QDialog QWidget#innerWidget{background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray);border-radius:20px;border:5px solid #0078d8; } QDialog#MessageDialog QWidget QWidget{ background:transparent;color:#3078d8;} QDialog#MessageDialog QWidget QWidget QLabel{ font-size:30px} #spacer_1, #spacer_2{min-width:2px;max-width:2px;margin-top:6px;margin-bottom:6px;border-right:1px solid #0078d8;} /*-----FormDialog-----*/ QPushButton#btnOK{background:#365880; font-weight:bold} QDialog#formDialog{border:3px solid grey; border-radius:8px} QWidget#slider_one{border:1px solid #505050; border-radius:8px} QWidget#formWidget QLabel#endline{border-bottom:1px solid grey} QWidget#formWidget{font-size:30px;} QLabel#title{font-size:30px; border-bottom:1px solid #3078d8 } QWidget#edit_patient{min-width:300px;max-width:300px;} QToolButton#sexBtn{min-width:120px;max-width:120px;font-size:20px;padding:2px;} QToolButton#sexBtn:disabled{color:grey} QWidget#sexpanelwidget{border:1px solid #505050;} QWidget#sexpanelwidget:enabled{background-color: #505050;} QToolButton#sexBtn:checked{border:2px solid darkorange;padding:0px;} /*---------Abount----------*/ QLabel#normal{color:#fcfcfc; font-weight:normal; font-size:16px;} QDialog#loginform{background-color:#3c3c3c; color:white;margin:0;font-size:16px;} QDialog#loginform QLabel#title{font-Size:98px;color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray);} QLabel#warn{color:#930000;background:transparent;font-size:20px;} QFrame#login_frame_username{min-width:700px;max-width:700px;max-height:500px;min-height:500px; border:1px solid #0078d8;border-radius:20px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 darkgray, stop: 0.5 gray, stop: 1.0 darkgray);} QDialog#loginform QLineEdit{min-height:100px;max-height:100px; border:1px solid silver;border-radius:10px;font-size:26px;} QDialog#loginform QLineEdit:enabled{background-color: #515151} QDialog#loginform QToolButton#btnlogin{min-height:100px;max-height:100px; min-width:border:1px solid #505050; border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QDialog#loginform QToolButton#btnlogin:hover{background:#505050;} \ No newline at end of file + /*------1.silver-->grey--------------------------*/ *{background-color:#3c3c3c; color:#fcfcfc;margin:0;font-size:16px;} QWidget#need_border{border:1px solid white} QTabBar::tab { height:60px; width:300px; font-size: 25px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #505050, stop: 1.0 #333333); border: 2px solid #505050; border-bottom-left-radius: 50%; border-bottom-right-radius: 50%; min-width: 8ex; padding: 2px; } QTabBar::tab:selected, QTabBar::tab:hover { border-top:5px solid #4a88c7; background: #505050;} QTabWidget::pane{margin:0} QPlainTextEdit{border:0px} QGroupBox{border:0px} QLabel{color:#fcfcfc; font-weight:bold; font-size:16px;} QLineEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QLineEdit:enabled{background-color: #505050;color:#fcfcfc;} QDateEdit{min-height:36px;max-height:36px; border:1px solid #505050;color:grey;border-radius:3px;} QDateEdit:enabled{background-color: #505050;color:#fcfcfc;} QTextEdit{ border:1px solid #505050;color:grey;border-radius:3px;} QTextEdit:enabled{background-color: #505050;color:#fcfcfc;} QComboBox{text-align:center;min-height:36px;max-height:36px; border:1px solid #505050} QComboBox:enabled{background-color: #505050} QComboBox::drop-down{width:20px} QComboBox QAbstractItemView{min-width:120px;} QComboBox QAbstractItemView::item {min-height:60px;max-height:60px; border:1px solid white;} QWidget QToolButton#showeditBtn{border-top:1px solid darkgray;border-bottom:1px solid darkgray;border-left:1px solid darkgray;border-radius: 0;border-bottom-left-radius:10px;font-size:20px;font-weight:normal; } QWidget QToolButton#hideeditBtn{border-top:1px solid darkgray;border-bottom:1px solid darkgray;border-left:1px solid darkgray;border-radius: 0;border-top-left-radius:10px;border-bottom-left-radius:10px;font-size:20px;font-weight:normal; } QWidget QToolButton{border:none;border-radius:10%;font-size:26px;background: #505050; font-weight:Bold;padding:5px;} QWidget QToolButton:disabled{border:none;color:#606060;background:#3c3c3c} QWidget QToolButton:hover{background:#505050;} QWidget QToolButton:checked{border:5px solid darkorange;padding:0px;} QPushButton{border:1px solid #505050 ;padding-left:50px;padding-right:50px; border-radius:5px; min-height:28px; max-height:28px; background:qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #505050, stop:1 #606060);} QListView{border:none;margin:5px; font-weight:bold} QListView::item{background:#4d4d4d;min-height:30px; border:1px solid #505050; border-radius:5px} QListView::item:selected{background:#365880;font-weight:bold;color:#fcfcfc;} /*QListView::item:selected{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ABAFE5, stop: 1 #8588B2); border:1px solid #505050; }*/ QHeaderView::section{background-color:#595959;min-height:50px;max-height:50px;font-weight:Bold; font-size:16px; border:1px solid #323232;} QHeaderView::section:horizontal{border-bottom: 1px solid rgb(0,170,255);} QHeaderView::section:vertical{min-height:36px;max-height:36px;} QTableView{border:none;alternate-background-color: #595959;selection-color:#fcfcfc;selection-background-color:#0078d8} /*-----------Specific---------------*/ QLabel#sliderPickerLabel{color:grey;padding:0;background:#505050;font-weight:normal;font-size:50px;} QWidget#topbarWidget{min-height:36px;max-height:36px;} QWidget#contentWidget{border-top:1px solid #505050;} QWidget#commandWidget{min-height:123px;max-height:123px;border-top:1px solid #505050; border-bottom:1px solid #323232;} QLabel#logo{min-width:30px;max-width:30px} QLabel#company{min-width:150px;max-width:150px; } QLabel#systemMsgBar{min-width:500px;} QLabel#warn{color:#CCCC00;background:transparent;font-size:20px;} QWidget QWidget#statusBarWidget{min-width:300px;} QToolButton#btn_main{border:2px solid #0078d8;border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QWidget#editcmdWidget{min-height:83px;max-height:83px;} QWidget#verSpaceLine{ border-right:1px solid #0078d8;} QWidget#topBottomLine{ border-top:2px solid #0078d8;border-bottom:2px solid #0078d8;background:transparent;} /*-----Settings*/ QPushButton#BigBtn{ padding-left:0px; padding-right:0px; min-height:60px; max-height:60px; min-width:140px; max-width:140px; font-size: 20px; font-weight:bold; } /*-----蒙版Dialog-----*/ QDialog QWidget#innerWidget{background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray);border-radius:20px;border:5px solid #0078d8; } QDialog#MessageDialog QWidget QWidget{ background:transparent;color:#3078d8;} QDialog#MessageDialog QWidget QWidget QLabel{ font-size:30px} #spacer_1, #spacer_2{min-width:2px;max-width:2px;margin-top:6px;margin-bottom:6px;border-right:1px solid #0078d8;} /*-----FormDialog-----*/ QPushButton#btnOK{background:#365880; font-weight:bold} QDialog#formDialog{border:3px solid grey; border-radius:8px} QWidget#slider_one{border:1px solid #505050; border-radius:8px} QWidget#formWidget QLabel#endline{border-bottom:1px solid grey} QWidget#formWidget{font-size:30px;} QLabel#title{font-size:30px; border-bottom:1px solid #3078d8 } QWidget#edit_patient{min-width:300px;max-width:300px;} QToolButton#sexBtn{min-width:120px;max-width:120px;font-size:20px;padding:2px;} QToolButton#sexBtn:disabled{color:grey} QWidget#sexpanelwidget{border:1px solid #505050;} QWidget#sexpanelwidget:enabled{background-color: #505050;} QToolButton#sexBtn:checked{border:2px solid darkorange;padding:0px;} /*---------Abount----------*/ QLabel#normal{color:#fcfcfc; font-weight:normal; font-size:16px;} QDialog#loginform{background-color:#3c3c3c; color:white;margin:0;font-size:16px;} QDialog#loginform QLabel#title{font-Size:98px;color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.0 darkgray, stop: 0.5 lightgray, stop: 1.0 darkgray);} QLabel#warn{color:#930000;background:transparent;font-size:20px;} QFrame#login_frame_username{min-width:700px;max-width:700px;max-height:500px;min-height:500px; border:1px solid #0078d8;border-radius:20px; background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 darkgray, stop: 0.5 gray, stop: 1.0 darkgray);} QDialog#loginform QLineEdit{min-height:100px;max-height:100px; border:1px solid silver;border-radius:10px;font-size:26px;} QDialog#loginform QLineEdit:enabled{background-color: #515151} QDialog#loginform QToolButton#btnlogin{min-height:100px;max-height:100px; min-width:border:1px solid #505050; border-radius:10%;font-size:26px; font-weight:Bold;padding:5px;} QDialog#loginform QToolButton#btnlogin:hover{background:#505050;} \ No newline at end of file