#include #include "mymessagebox.h" #include "ui_mymessagebox.h" #include "Driver/buzzerdrv.h" MessageBox::MessageBox(QWidget *parent, const QString &text, myButtons buttons, Work_Thread *thread) : QDialog(parent), ui(new Ui::MessageBox) { ui->setupUi(this); this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint); initpage(); mMoveing = false; workThread = thread; t_timer = new QTimer(this); connect(t_timer,SIGNAL(timeout()),this,SLOT(checkAutoClose())); t_timer->start(500); setButtons(buttons); setLabelWidth(ui->label_Text,text); connect(ui->toolButton_close, SIGNAL(pressed()), this, SLOT(btn_beep())); connect(ui->toolButton_yes, SIGNAL(pressed()), this, SLOT(btn_beep())); connect(ui->toolButton_ok, SIGNAL(pressed()), this, SLOT(btn_beep())); connect(ui->toolButton_no, SIGNAL(pressed()), this, SLOT(btn_beep())); connect(ui->toolButton_close, SIGNAL(released()), this, SLOT(onButtonReleased())); connect(ui->toolButton_yes, SIGNAL(released()), this, SLOT(onButtonReleased())); connect(ui->toolButton_ok, SIGNAL(released()), this, SLOT(onButtonReleased())); connect(ui->toolButton_no, SIGNAL(released()), this, SLOT(onButtonReleased())); } MessageBox::~MessageBox() { delete t_timer; delete ui; } void MessageBox::checkAutoClose() { if(workThread->remoteState.to_workpage == 1){ //close(); reject(); } } void MessageBox::btn_beep(void) { BuzzerDrv BD; BD.BuzzerBeep(50); } void MessageBox::setButtons(myButtons buttons) { ui->toolButton_yes->setVisible(false); ui->toolButton_ok->setVisible(false); ui->toolButton_no->setVisible(false); if(buttons.testFlag(Yes) && buttons.testFlag(No)) { ui->toolButton_yes->setVisible(true); ui->toolButton_yes->setText(tr("确定"));//(tr("Yes")); ui->toolButton_no->setVisible(true); ui->toolButton_no->setText(tr("取消"));//(tr("No")); } if(buttons.testFlag(Ok)) { ui->toolButton_ok->setVisible(true); ui->toolButton_ok->setText(tr("确定"));//(tr("OK")); } } void MessageBox::setLabelWidth(QLabel *Label,const QString &text) { #define MAX_Width 750 QFontMetrics fm(Label->font()); int textWidth = fm.width(text); QString str,testtext; str.clear(); testtext.clear(); if(textWidth > MAX_Width) { int width1 = textWidth%MAX_Width; if(width1 < 50) width1 = MAX_Width-50; else width1 = MAX_Width; for(int i=0;i width1) { if((text.at(i).isLower() || text.at(i).isUpper()) &&(text.at(i+1).isLower() || text.at(i+1).isUpper())) { str.append("-\n"); } else { str.append("\n"); } testtext += str; str.clear(); } } testtext += str; } else { testtext = text; } Label->setText(testtext); } //***************************************************************************** void MessageBox::onButtonReleased(void) { int button = 0; QToolButton *tb = dynamic_cast(sender()); if(ui->toolButton_yes == tb) button = Yes; else if(ui->toolButton_ok == tb) button = Ok; else if(ui->toolButton_no == tb) button = No; else //if(ui->toolButton_close == tb) button = NoButton; done(button); } //***************************************************************************** void MessageBox::mousePressEvent(QMouseEvent *event) { mMoveing = true; mMovePosition = event->globalPos() - pos(); return QDialog::mousePressEvent(event); } void MessageBox::mouseMoveEvent(QMouseEvent *event) { QPoint temp = event->globalPos()-mMovePosition; if(temp.x()>800-this->width()) temp.setX(800-this->width()); else if(temp.x()<0) temp.setX(0); if(temp.y()>480-this->height()) temp.setY(480-this->height()); else if(temp.y()<0) temp.setY(0); if (mMoveing && (event->buttons() && Qt::LeftButton) && temp.manhattanLength() > QApplication::startDragDistance()) { move(temp); mMovePosition = event->globalPos() - pos(); } return QDialog::mouseMoveEvent(event); } void MessageBox::mouseReleaseEvent(QMouseEvent *event) { mMoveing = false; return QDialog::mouseReleaseEvent(event); } void MessageBox::settext(const QString text) { setLabelWidth(ui->label_Text,text); } void MessageBox::set_yes_btn_text(bool en, QString str){ ui->toolButton_yes->setEnabled(en); ui->toolButton_yes->setText(str); } void MessageBox::initpage(){ QPixmap TempPix=style()->standardPixmap(QStyle::SP_TitleBarCloseButton); ui->toolButton_close->setIcon(TempPix); ui->toolButton_close->setStyleSheet("background-color: rgb(97, 118, 184);"); }