范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Qt开发Qt中的事件处理(上)

  一、图形界面应用程序的消息处理模型
  二、Qt的事件处理
  1、Qt平台 将系统产生的消息转换为Qt事件 (每一个系统消息对象Qt平台的一个事件)
  (1)、Qt事件 是一个 QEvent的对象
  (2)、Qt事件用于描述程序 内部或者外部发生的动作
  (3)、 任意的QObject对象 都具备事件处理的能力
  2、GUI应用程序的事件处理方式
  (1)、Qt事件产生后 立即被分发到QWidget对象
  (2)、QWidget中的 event(QEvent*)进行事件处理
  (3)、event() 根据事件类型 调用不同的事件处理函数
  (4)、在 事件处理函数中 发送Qt中预定义的信号
  (5)、 调用信号关联的槽函数
  3、情景分析:按钮点击
  (1)、接收到鼠标事件( 代表一个系统消息 )
  (2)、调用event(QEvent*)成员函数
  (3)、调用 MouseReleaseEvent(QMouseEvent*) 成员函数
  (4)、调用 clicked() 成员函数
  (5)、 触发信号SIGNAL(clicked())
  4、事件(QEvent)和信号(SIGNAL)不同
  (1)、事件由具体对象 进行处理
  (2)、信号由具体对象 主动产生
  (3)、改写事件处理函数 可能导致程序行为 发生改变
  (4)、信号是否存在对应的槽函数 不会改变程序的行为
  (5)、 一般而言,信号在具体的事件处理函数中产生 三、文本编辑器的关闭操作
  void MainWindow::closeEvent(QCloseEvent *e)//没有对应的信号来处理,只能重写事件处理函数 {     preEditorChanged();      if(!m_isTextChanged)     {         QMainWindow::closeEvent(e);//调用父类的关闭事件处理函数     }     else     {         e->ignore();//点取消的话就忽略这个对话框     } }
  完整代码: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  class MainWindow : public QMainWindow {     Q_OBJECT private:         QPlainTextEdit mainEdit;         QLabel statusLabel;         QString m_filePath;//记得在构造函数里初始化         bool m_isTextChanged;//构造函数里初始化为false          MainWindow(QWidget *parent = 0);         MainWindow(const MainWindow& obj);         MainWindow* operator = (const MainWindow& obj);         bool construct();          bool initMenuBar();//菜单栏         bool initToolBar();//工具栏         bool initStatusBar();//状态栏         bool initinitMainEditor();//编辑窗口          bool initFileMenu(QMenuBar* mb);//文件菜单         bool initEditMenu(QMenuBar* mb);//编辑菜单         bool initFormatMenu(QMenuBar* mb);//格式菜单         bool initViewMenu(QMenuBar* mb);//视图菜单         bool initHelpMenu(QMenuBar* mb);//帮助菜单          bool initFileToolItem(QToolBar* tb);//工具选项         bool initEditToolItem(QToolBar* tb);         bool initFormatToolItem(QToolBar* tb);         bool initViewToolItem(QToolBar* tb);           bool makeAction(QAction*& action,QMenu* menu, QString text, int key);//菜单项         bool makeAction(QAction*& action,QToolBar* tb, QString tip, QString icon);          QString showFileDialog(QFileDialog::AcceptMode mode, QString title);//文件对话框         void showErrorMessage(QString message);//错误消息对话框         int showQuesstionMessage(QString message);//问题消息对话框         QString saveCurrentData(QString path = "");         void preEditorChanged();  private slots:         void onFileNew();         void onFileOpen();         void onFlieSave();         void onFileSaveAs();         void onTextChanged(); protected:         void closeEvent(QCloseEvent *e);//重写关闭窗口的事件处理函数 public:      static MainWindow* NewInstance();     ~MainWindow(); };  #endif // MAINWINDOW_H#include "MainWindow.h" #include   MainWindow::MainWindow(QWidget *parent)     : QMainWindow(parent), statusLabel(this) {     m_filePath = "";     m_isTextChanged = false;     setWindowTitle("NotePad-[New]"); }  bool MainWindow::construct() {     bool ret = true;     ret = ret && initMenuBar();     ret = ret && initToolBar();     ret = ret && initStatusBar();     ret = ret && initinitMainEditor();     return ret; } MainWindow* MainWindow::NewInstance() {     MainWindow* ret = new MainWindow();      if((ret==NULL) || (!ret->construct()))     {         delete ret;         ret = NULL;     }      return ret; } bool MainWindow::initMenuBar()//菜单栏 {     bool ret = true;      QMenuBar* mb = menuBar();//一定要注意是menuBar(),这是普通成员函数,不是构造函数      ret = ret && initFileMenu(mb);//传一个参数是为了在initFileMenu()函数将menu加入菜单栏     ret = ret && initEditMenu(mb);     ret = ret && initFormatMenu(mb);     ret = ret && initViewMenu(mb);     ret = ret && initHelpMenu(mb);      return ret;  }  bool MainWindow::initToolBar()//工具栏 {     bool ret = true;      QToolBar* tb = addToolBar("Tool Bar");     //tb->setMovable(false);     //tb->setFloatable(false);     tb->setIconSize(QSize(16,16));      ret = ret && initFileToolItem(tb);     tb->addSeparator();     ret = ret && initEditToolItem(tb);     tb->addSeparator();     ret = ret && initFormatToolItem(tb);     tb->addSeparator();     ret = ret && initViewToolItem(tb);      return ret; }  bool MainWindow::initStatusBar()//状态栏 {     bool ret = true;      QStatusBar* sb = statusBar();      QLabel* label = new QLabel("Made By LGC");      if(label != NULL)     {         statusLabel.setMinimumWidth(200);         statusLabel.setAlignment(Qt::AlignHCenter);         statusLabel.setText("Ln:1    Col:1");           label->setMinimumWidth(200);         label->setAlignment(Qt::AlignHCenter);          sb->addPermanentWidget(new QLabel());//单纯加入分隔符         sb->addPermanentWidget(&statusLabel);         sb->addPermanentWidget(label);     }     else     {         ret = false;     }     return ret; } bool MainWindow::initinitMainEditor()//编辑窗口 {     bool ret = true;      mainEdit.setParent(this);     setCentralWidget(&mainEdit);      connect(&mainEdit, SIGNAL(textChanged()), this, SLOT(onTextChanged()));      return ret; }  /************************************************文件菜单********************************************************/ bool MainWindow::initFileMenu(QMenuBar* mb) {     bool ret = true;      QMenu* menu = new QMenu("File(&F)");//创建文件菜单,(&F)是为了可以Alt+F打开     ret = (menu != NULL);     if(ret)     {         QAction* action = NULL;          //New         ret = ret &&  makeAction(action, menu, "New(&N)",Qt::CTRL + Qt::Key_N);         if(ret)         {            connect(action, SIGNAL(triggered()), this, SLOT(onFileNew()));            menu->addAction(action);         }          menu->addSeparator();          //Open         ret = ret &&  makeAction(action,  menu,"Open(&O)...",Qt::CTRL + Qt::Key_O);         if(ret)         {            connect(action, SIGNAL(triggered()), this, SLOT(onFileOpen()));            menu->addAction(action);         }          menu->addSeparator();          //Save         ret = ret &&  makeAction(action,  menu,"Save(&S)",Qt::CTRL + Qt::Key_S);         if(ret)         {             connect(action, SIGNAL(triggered()), this ,SLOT(onFlieSave()));             menu->addAction(action);         }          menu->addSeparator();          //Save As         ret = ret &&  makeAction(action, menu, "Save As(&A)...",0);         if(ret)         {            connect(action, SIGNAL(triggered()), this, SLOT(onFileSaveAs()));            menu->addAction(action);          }          menu->addSeparator();          //print         ret = ret &&  makeAction(action, menu, "Print(&P)...",Qt::CTRL + Qt::Key_P);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Exit         ret = ret &&  makeAction(action,  menu,"Exit(&X)",0);         if(ret)         {            menu->addAction(action);//将菜单项加入到菜单         }      }     if(ret)     {         mb->addMenu(menu);//将菜单加入到菜单栏     }     else     {         delete mb;     }     return ret; }  /************************************************编辑菜单********************************************************/ bool MainWindow::initEditMenu(QMenuBar* mb) {     bool ret = true;      QMenu* menu = new QMenu("Edit(&E)");     ret = (menu != NULL);     if(ret)     {         QAction* action = NULL;          //Undo         ret = ret &&  makeAction(action,  menu,"Undo(&U)",Qt::CTRL + Qt::Key_Z);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Redo         ret = ret &&  makeAction(action,  menu,"Redo(&R)...",Qt::CTRL + Qt::Key_Y);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Cut         ret = ret &&  makeAction(action,  menu,"Cut(&T)",Qt::CTRL + Qt::Key_X);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Copy         ret = ret &&  makeAction(action,  menu,"Copy(&C)...",Qt::CTRL + Qt::Key_C);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Pase         ret = ret &&  makeAction(action,  menu,"Pase(&P)...",Qt::CTRL + Qt::Key_V);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Delete         ret = ret &&  makeAction(action, menu, "Delete(&L)",Qt::Key_Delete);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Find         ret = ret &&  makeAction(action,  menu,"Find(&F)...",Qt::CTRL + Qt::Key_F);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Replace         ret = ret &&  makeAction(action,  menu,"Replace(&R)...",Qt::CTRL + Qt::Key_H);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Goto         ret = ret &&  makeAction(action,  menu,"Goto(&G)",Qt::CTRL + Qt::Key_G);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Select All         ret = ret &&  makeAction(action, menu, "Select All(&A)",Qt::CTRL + Qt::Key_A);         if(ret)         {            menu->addAction(action);         }      }     if(ret)     {         mb->addMenu(menu);     }     else     {         delete mb;     }     return ret; }  /************************************************格式菜单********************************************************/ bool MainWindow::initFormatMenu(QMenuBar* mb) {     bool ret = true;      QMenu* menu = new QMenu("Format(&O)");     ret = (menu != NULL);     if(ret)     {         QAction* action = NULL;          //Auto Wrap         ret = ret &&  makeAction(action,  menu,"Auto Wrap(&W)",0);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Font         ret = ret &&  makeAction(action,  menu,"Font(&F)...",0);         if(ret)         {            menu->addAction(action);         }      }     if(ret)     {         mb->addMenu(menu);     }     else     {         delete mb;     }     return ret; }  /************************************************视图菜单********************************************************/ bool MainWindow::initViewMenu(QMenuBar* mb) {     bool ret = true;      QMenu* menu = new QMenu("View(&V)");     ret = (menu != NULL);     if(ret)     {         QAction* action = NULL;          //Tool Bar         ret = ret &&  makeAction(action, menu,"Tool Bar(&T)",0);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //Status Bar         ret = ret &&  makeAction(action, menu,"Status Bar(&S)",0);         if(ret)         {            menu->addAction(action);         }      }     if(ret)     {         mb->addMenu(menu);     }     else     {         delete mb;     }     return ret; }  /************************************************帮助菜单********************************************************/ bool MainWindow::initHelpMenu(QMenuBar* mb) {     bool ret = true;      QMenu* menu = new QMenu("Help(&H)");     ret = (menu != NULL);     if(ret)     {         QAction* action = NULL;          //User Manual         ret = ret &&  makeAction(action,  menu,"User Manual",0);         if(ret)         {            menu->addAction(action);         }          menu->addSeparator();          //About NotePad         ret = ret &&  makeAction(action,  menu,"About NotePad...",0);         if(ret)         {            menu->addAction(action);         }      }     if(ret)     {         mb->addMenu(menu);     }     else     {         delete mb;     }     return ret; } /*****************************************工具************************************************************/ bool MainWindow::initFileToolItem(QToolBar* tb) {     bool ret = true;     QAction* action = NULL;      ret = ret && makeAction(action, tb, "New", ":/Res/pic/new.png");     if(ret)     {         connect(action, SIGNAL(triggered()), this, SLOT(onFileNew()));         tb->addAction(action);      }      ret = ret && makeAction(action,  tb,"Open", ":/Res/pic/open.png");     if(ret)     {         connect(action, SIGNAL(triggered()), this, SLOT(onFileOpen()));         tb->addAction(action);     }      ret = ret && makeAction(action,  tb,"Save", ":/Res/pic/save.png");     if(ret)     {         connect(action, SIGNAL(triggered()), this ,SLOT(onFlieSave()));         tb->addAction(action);     }      ret = ret && makeAction(action,  tb,"Save As", ":/Res/pic/saveas.png");     if(ret)     {         connect(action, SIGNAL(triggered()), this, SLOT(onFileSaveAs()));         tb->addAction(action);     }     ret = ret && makeAction(action, tb,"Print",  ":/Res/pic/print.png");     if(ret)     {         tb->addAction(action);     }     return ret;  } bool MainWindow::initEditToolItem(QToolBar* tb) {     bool ret = true;     QAction* action = NULL;      ret = ret && makeAction(action, tb,"Undo",  ":/Res/pic/undo.png");     if(ret)     {         tb->addAction(action);     }     ret = ret && makeAction(action,  tb,"Redo", ":/Res/pic/redo.png");     if(ret)     {         tb->addAction(action);     }      ret = ret && makeAction(action, tb, "Cut",  ":/Res/pic/cut.png");     if(ret)     {         tb->addAction(action);     }      ret = ret && makeAction(action,  tb,"Copy", ":/Res/pic/copy.png");     if(ret)     {         tb->addAction(action);     }      ret = ret && makeAction(action, tb,"Paste",  ":/Res/pic/paste.png");     if(ret)     {         tb->addAction(action);     }      ret = ret && makeAction(action, tb,"Find",  ":/Res/pic/find.png");     if(ret)     {         tb->addAction(action);     }     ret = ret && makeAction(action, tb,"Replace",  ":/Res/pic/replace.png");     if(ret)     {         tb->addAction(action);     }     ret = ret && makeAction(action, tb,"Goto",  ":/Res/pic/goto.png");     if(ret)     {         tb->addAction(action);     }      return ret; } bool MainWindow::initFormatToolItem(QToolBar* tb) {     bool ret = true;     QAction* action = NULL;      ret = ret && makeAction(action, tb, "Auto Wrap", ":/Res/pic/wrap.png");     if(ret)     {         tb->addAction(action);     }     ret = ret && makeAction(action, tb,"Font",  ":/Res/pic/font.png");     if(ret)     {         tb->addAction(action);     }      return ret; } bool MainWindow::initViewToolItem(QToolBar* tb) {     bool ret = true;     QAction* action = NULL;      ret = ret && makeAction(action,  tb,"Tool Bar", ":/Res/pic/tool.png");     if(ret)     {         tb->addAction(action);     }     ret = ret && makeAction(action,  tb,"Status Bar", ":/Res/pic/status.png");     if(ret)     {         tb->addAction(action);     }      return ret; }   bool MainWindow::makeAction(QAction*& action,QMenu* menu, QString text, int key)//菜单项 {     bool ret = true;     action = new QAction(text, menu);     if(action != NULL)     {         action->setShortcut(QKeySequence(key));//创建快捷键     }     else     {         ret = false;     }      return ret; } bool MainWindow::makeAction(QAction*& action,QToolBar* tb, QString tip, QString icon) {     bool ret = true;     action = new QAction("", tb);     if(action != NULL)     {         action->setToolTip(tip);         action->setIcon(QIcon(icon));     }     else     {         ret = false;     }     return ret; } MainWindow::~MainWindow() {  }#include  #include  #include  #include  #include  #include "MainWindow.h" #include   QString MainWindow::showFileDialog(QFileDialog::AcceptMode mode, QString title) {     QString ret = "";     QFileDialog fd;     QStringList filters;     QMap map;      const char* fileArray[][2]=     {          {"Text(*.txt)",    ".txt"},         {"All Files(*.*)",   "*" },         {NULL,               NULL}      };      for(int i=0; fileArray[i][0] != NULL; i++)     {         filters.append(fileArray[i][0]);         map.insert(fileArray[i][0], fileArray[i][1]);     }      fd.setWindowTitle(title);     fd.setAcceptMode(mode);       fd.setNameFilters(filters);      if(mode==QFileDialog::AcceptOpen)     {         fd.setFileMode(QFileDialog::ExistingFile);     }      if(fd.exec()==QFileDialog::Accepted)     {         ret = fd.selectedFiles()[0];          QString posix = map[fd.selectedNameFilter()];//把下拉中选中的后缀对应键值取出          if(posix != "*" && !ret.endsWith(posix))         {             ret += posix;         }     }      return ret; }  void MainWindow::showErrorMessage(QString message) {     QMessageBox mb(this);      mb.setWindowTitle("Quession");     mb.setText(message);     mb.setIcon(QMessageBox::Critical);     mb.setStandardButtons(QMessageBox::Ok);      mb.exec(); }  int MainWindow::showQuesstionMessage(QString message) {     QMessageBox mb(this);      mb.setWindowTitle("Error");     mb.setText(message);     mb.setIcon(QMessageBox::Question);     mb.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);      return  mb.exec(); }  QString MainWindow::saveCurrentData(QString path) {     QString ret = path;     if(ret == "")     {         ret = showFileDialog(QFileDialog::AcceptSave, "Save");      }      if(ret != "")     {         QFile file(ret);         if(file.open(QIODevice::WriteOnly | QIODevice::Text))         {             QTextStream out(&file);              out << QString(mainEdit.toPlainText());              file.close();              setWindowTitle("NotePad - [" + ret + "]");              m_isTextChanged = false;//保存后修改状态值         }         else         {             showErrorMessage(QString("Open file Error!  ") + """ + m_filePath + """);             ret = "";         }     }      return ret;  } void MainWindow::preEditorChanged() {     if(m_isTextChanged)     {         int r = showQuesstionMessage("Do you want to Save?");         switch (r)         {         case QMessageBox::Yes:             saveCurrentData(m_filePath);             break;         case QMessageBox::No:             m_isTextChanged = false;             break;         case QMessageBox::Cancel:             break;         }      } } void MainWindow::onFileNew() {     preEditorChanged();     if(!m_isTextChanged)     {         mainEdit.clear();          m_filePath = "";          m_isTextChanged = false;          setWindowTitle("NotePad-[New]");     } } void MainWindow::onFileOpen() {      preEditorChanged();      if(!m_isTextChanged)     {         QString path = showFileDialog(QFileDialog::AcceptOpen, "open");          if(path != "")         {             QFile file(path);             if(file.open(QIODevice::ReadOnly | QIODevice::Text))             {                 mainEdit.setPlainText(QString(file.readAll()));                  file.close();                  m_filePath = path;//报存当前文件路径                  setWindowTitle("NotePad - [" + m_filePath + "]");             }             else             {                 showErrorMessage(QString("Open file Error!  ") + """ + m_filePath + """);             }         }     }  }  void MainWindow::onFlieSave() {     QString path = saveCurrentData(m_filePath);      if(path != "")     {         m_filePath = path;     } }  void MainWindow::onFileSaveAs() {     QString path = saveCurrentData();//使用默认参数      if(path != "")     {         m_filePath = path;     }  } void MainWindow::onTextChanged() {     if(!m_isTextChanged)     {         setWindowTitle("*" + windowTitle());     }     m_isTextChanged = true;  }  void MainWindow::closeEvent(QCloseEvent *e)//没有对应的信号来处理,只能重写事件处理函数 {     preEditorChanged();      if(!m_isTextChanged)     {         QMainWindow::closeEvent(e);//调用父类的关闭事件处理函数     }     else     {         e->ignore();//点取消的话就忽略这个对话框     } }#include  #include "MainWindow.h" #include    int main(int argc, char *argv[]) {     QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); //路径名支持中文     QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //QString支持中文     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); //string支持中文     QApplication a(argc, argv);     MainWindow* w = MainWindow::NewInstance();     int ret = -1;     if(w != NULL)     {         w->show();         ret = a.exec();     }      delete w;     return ret; }四、小结
  (1)、事件(QEvent)和信号(SIGNAL) 不同
  (2)、事件由 QObject对象 进行处理
  (3)、 信号由QObject对象触发
  (4)、 重写事件处理函数 可能改变程序行为
  (5)、信号的触发 不会 对程序行为造成影响
  (6)、 事件处理是在实际工程开发中的应用非常普遍
  【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
  「链接」

为何太阳队媒体日如葬礼?太阳的两大大问题影响着球队未来对于太阳来说,这是一个很糟糕的休赛季。上赛季季后赛以一种几乎耻辱的方式输掉了抢七之战,似乎就此实锤了队内不和的流言休赛期又是克劳德这位重要轮换申请交易,又是老板因为言论惹得一身骚,命运2巨型规格臂甲日2022。10。06枪匠艾达与遗失区命运2巨型规格辐射光能臂甲日2022。10。06枪匠艾达与遗失区域导购1,遗失区域手臂,欧洲无人区,挖掘区左边的遗失卡巴尔怪物2,巨型规格,辐射光能都要买哟,PVP瞄准协调器,霰弹9扣3拦5防!中国女排争议大将绝杀,再现救命防守,怒吼庆祝中国女排险胜荷兰女排,队长袁心玥延续了此前的出色发挥。作为球队领袖的她,本场在攻防两端都起到了非常重要的作用。在最后时刻遭到对手疯狂反扑时,她甚至贡献了致命的绝杀。凭借世锦赛的出色张震上将3次请辞,职务反而上升,邓小平你小我10岁,再干一届请大家点赞关注头条号杰瑞哥侃历史,杰瑞哥会持续为大家讲述更多精彩的历史故事,带您一同重温过去的峥嵘岁月!我这一生实在没多少东西可写。张震诚然,张震老将军这话太谦虚了。一申请退休反被怒斥陈毅,教训刘亚楼罗瑞卿,温文尔雅的周总理为何大发雷霆?文探古论今人编辑探古论今人正所谓言出必行,与发展中国家广交朋友灵活应变,积极促成与西方国家建交继往开来,构建人类命运共同体在外交事务中,深受祖国人民爱戴的周总理,素来以其温文尔雅善CBA直播新疆伊力王酒VS北京首钢预测分析难分轩轾CBA直播新疆伊力王酒VS北京首钢预测分析难分轩轾队伍新疆伊力王酒VS北京首钢时间10月07日1530比赛类型CBA季前赛北京时间10月07日1530,LDSPORTS分析CBA季新疆9分赢北京!朱旭航惹怒裁判,双中锋围剿法尔,范子铭827465!7日下午的CBA季前赛里,新疆战胜北京首钢,双方把休赛期的调整效果呈现给球迷。今年夏天北京首钢进入重建阶段,解立彬被扶正之后打算重点培养年轻人,之前雅尼斯的慢节奏阵地战可CBA季前赛法尔首秀47ampampamp杰克逊21分新疆击败北京直播吧10月7日讯CBA季前赛,新疆7465击败北京。开场新疆状态进入更快,首节领先北京9分,次节北京状态回暖,半场新疆3529领先北京。下半场再战,两队防守强度都有提升,新疆依靠摘了一束野花后,北京一女子被刑拘,这些植物不能乱采近日,一条新闻登上热搜北京一市民驾车出游时,看到一处山崖上有一株美丽的小花,十分喜爱,拍照之后不仅摘下来带回了家,还发到了微博上炫耀。图源法制进行时第二天,警方就找上了门。原来孙某潇洒中国行首都北京北京地处华北平原北部,东与天津毗连,其余均与河北相邻,是世界著名古都和现代化国际大都市,也是第一个双奥之城!北京的气候为暖温带半湿润半干旱季风气候,夏季高温多雨,冬季寒冷干燥,春秋拒绝姚明,告别中国男篮,王治郅新工作亮相,表示很满意王治郅是中国男篮的传奇球星,他的一举一动,也都在球迷的关注之中。八一男篮在2020年的时候,宣布不再参加CBA赛事,在那之后,王治郅也就很少亮相在媒体面前了。其实还是有许多俱乐部,
电子商务企业需要知道的关键日期您的2023年日历随着2022年的临近,电子商务企业应开始提前计划2023年的关键销售日期假期和电子商务活动。重要的是要密切关注电子商务行业正在发生的事情以及将影响消费者的重大事件的脉搏购买习惯。此要人性还是要兽性中国不缺善良的人,也不缺有血性的人,缺的是给予善行公平公正的措施。谁都愿意做好人,谁都教自家孩子要尊老爱幼。但是经济社会谋利者,总能像林中的猎犬一样,找到各种法子,用你想不到的方式我怀念的曾经以为,离开就不会再回来。所以在有限的几年时光里,我们疯狂的挥洒青春。曾经以为,放下的课本不会再拿起。所以曾经的图书馆成为每天签到的地方。曾经以为,考完就再也用不上的高数等等课程凤凰涅槃,浴火重生(四)我的生活也是头条刚刚好当一个人冷落你时,不要伤心,不要愤怒,每个人都有自己的生活,谁都不可能一直陪着你,哪怕是父母爱人孩子,也是如此,世界上最尴尬的事,莫过于高估了自己在别人心里的中南门上榜!2022年省级夜间消费聚集区公布近日,省商务厅官网公布省商务厅关于公布2022年省级夜间消费聚集区美食街区名单的通知,授予青云路步行街等24个聚集区2022年省级夜间消费聚集区称号,授予花溪区十字街等5条街区20涨知识!2022香港护照竟然可免签落地签入境这么多国家香港护照免签落地签国家和地区增加至168个!(最近经常有香港户籍的人,大家可参考!!!!)香港特区护照在全球有效,获得香港身份后即可领取香港特区护照,现时已有168个国家和地区给予连开四天夜场!天空之鱼跨年夜空降武汉欢乐谷长江网讯(见习记者王允祺通讯员高颖)2022年进入倒计时,岁末年终,来武汉欢乐谷赏新灯迎新年,12月30日起连开四天夜场。12月31日晚,欢乐谷现场上演天空之鱼奇幻秀,可以手动控制看熊猫,有优惠!168元一张通耍一年!12月28日,记者从成都熊猫基地获悉,为丰富旅游产品,为广大游客提供多样化票务选择,成都熊猫基地将于12月29日起陆续推出年票川渝优惠票双重优惠活动。成都熊猫基地此次推出单人年票学青岛有座美丽的小洋楼蝴蝶楼蝴蝶楼位于青岛市市南区八大景区内山海关路21号蝴蝶楼我有幸在今年的(2022年)8月5日参观了这座红白相间的小洋楼院内到处都是蝴蝶之所以叫蝴蝶楼是因为中国的影星蝴蝶曾经在这里住过。喝咖啡饮小酒品好书泰晤士小镇这些宝藏店铺等你来打卡冬日来临,温暖的室内活动更加受到市民青睐,找一家装修精致的店铺,和三两好友小聚,何等惬意。在松江区泰晤士小镇,有许多宝藏店铺,喝咖啡饮小酒品好书大家可以在这些店铺里享受专属自己的暖落羽杉变装,广州上演限定款冬日浪漫12月26日,广州麓湖公园,落羽杉悄然换装,吸引市民前来打卡。南都拍客陈志强摄在阳光洒落与微风吹拂之下,落羽杉的叶片如羽毛般轻盈飘逸,更增添冬日浪漫唯美的意境。年末时节,广州各大公