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

Qt高级Qt自定义标题栏

  QWidget及其子类窗体组件的标题栏受操作系统的控制,即标题栏的界面风格与操作系统的主题风格相同,工程实践中需要开发者自行定一,达到美化应用程序界面的目的。
  一、Qt自定义标题栏实现
  1、自定义标题栏的功能
  自定义标题栏需要完成功能如下:
  (1)自定义标题栏需要包含最小化按钮、最大化按钮、关闭按钮、标题标签、图标标签等图形元素。
  (2)标题栏的拖拽。
  (3)鼠标双击标题栏实现窗体的最大化、最小化。
  2、自定义标题栏的界面布局
  自定义标题栏的界面布局如下:
  3、标题栏拖拽功能的实现
  窗体的拖拽平移过程如下图:
  当鼠标在窗体的标题栏按下并移动时,窗体会按照鼠标移动的轨迹进行平移。因此,窗体每次移动都是在当前位置按照鼠标移动的矢量进行移动。标题栏拖拽功能的实现需要实现mousePressEvent、mouseMoveEvent、mouseReleaseEvent三个事件处理函数。
  MouseEvent中的globalPos()函数返回的是相对屏幕的位置坐标,而pos()则是返回鼠标在当前控件(即捕获该鼠标事件的控件)中的位置。QWidget窗体的geometry().topLeft()则返回的是当前窗体的左上角在屏幕中的位置。 startPos = event->globalPos();// 鼠标的全局初始位置,按下时记住 curWindowPos = geometry().topleft();// 窗体的全部位置,移动时 endPos = event->globalPos();// 鼠标按下发生移动之后的位置,移动时 move(curWindowPos+(startPos-endPos));// 根据矢量移动方向是初始位置减去末位置,移动时 startPos = endPos;// 将初始位置记为上次末位置,然后执行直到释放拖拽,移动时
  实现代码如下:void TitleBar::mousePressEvent(QMouseEvent *event) { // 鼠标左键按下事件 if (event->button() == Qt::LeftButton) { // 记录鼠标左键状态 m_leftButtonPressed = true; //记录鼠标在屏幕中的位置 m_start = event->globalPos(); } } void TitleBar::mouseMoveEvent(QMouseEvent *event) { // 持续按住才做对应事件 if(m_leftButtonPressed) { //将父窗体移动到父窗体原来的位置加上鼠标移动的位置:event->globalPos()-m_start parentWidget()->move(parentWidget()->geometry().topLeft() + event->globalPos() - m_start); //将鼠标在屏幕中的位置替换为新的位置 m_start = event->globalPos(); } } void TitleBar::mouseReleaseEvent(QMouseEvent *event) { // 鼠标左键释放 if (event->button() == Qt::LeftButton) { // 记录鼠标状态 m_leftButtonPressed = false; } }
  4、标题栏双击实现最大化、最小化
  鼠标双击事件处理函数mouseDoubleClickEvent实现如下:void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) { m_maximizeButton->click(); }
  最大化、最小化、关闭按钮的槽函数如下:void TitleBar::onClicked() { QPushButton *pButton = qobject_cast(sender()); QWidget *pWindow = this->window(); if (pWindow->isTopLevel()) { if (pButton == m_minimizeButton) { pWindow->showMinimized(); } else if (pButton == m_maximizeButton) { pWindow->isMaximized() ? pWindow->showNormal() : pWindow->showMaximized(); } else if (pButton == m_closeButton) { pWindow->close(); } } }
  二、Qt自定义窗体基类示例
  1、自定义窗体基类的功能
  自定义窗体基类的功能如下:
  (1)自定义标题栏。
  (2)增加内容组件,内容组件内部的界面布局完全由具体的用户决定。
  2、自定义窗体基类的实现
  TitleBar.h文件:#ifndef TITLEBAR_H #define TITLEBAR_H #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  /** * @brief 标题栏界面组件 * @author */ class TitleBar : public QWidget { Q_OBJECT public: explicit TitleBar(QWidget *parent = NULL); /** * @brief 设置标题栏标题 * @param title,参数,设置的标题 */ void setWindowTitle(const QString& title); /** * @brief 设置标题栏的图标 * @param iconPath,参数,图标的路径 */ void SetTitleBarIcon(const QString& iconPath); protected: /** * @brief 鼠标双击事件处理函数 * @param event,参数,事件 * @note 双击标题栏进行界面的最大化/还原 */ virtual void mouseDoubleClickEvent(QMouseEvent *event); /** * @brief 鼠标按下事件处理函数 * @param event,参数,事件 * @note 按下鼠标左键 */ virtual void mousePressEvent(QMouseEvent *event); /** * @brief 鼠标移动事件处理函数 * @param event,参数,事件 * @note 移动鼠标 */ virtual void mouseMoveEvent(QMouseEvent *event); /** * @brief 鼠标释放事件处理函数 * @param event,参数,事件 * @note 释放鼠标 */ virtual void mouseReleaseEvent(QMouseEvent *event); /** * @brief 事件过滤处理器 * @param obj,参数 * @param event,参数,事件 * @return 成功返回true,失败返回false * @note 设置标题、图标 */ virtual bool eventFilter(QObject *obj, QEvent *event); /** * @brief 最大化/还原 */ void updateMaximize(); protected slots: /** * @brief 最小化、最大化/还原、关闭按钮点击时响应的槽函数 */ void onClicked(); private: QLabel* m_iconLabel; QLabel* m_titleLabel; QPushButton* m_minimizeButton; QPushButton* m_maximizeButton; QPushButton* m_closeButton; QPoint m_start;//起始点 QPoint m_end;//结束点 bool m_leftButtonPressed;//鼠标左键按下标记 }; #endif // TITLEBAR_H
  TitleBar.cpp文件:#include "TitleBar.h" TitleBar::TitleBar(QWidget *parent) : QWidget(parent) { setFixedHeight(30); setWindowFlags(Qt::FramelessWindowHint); m_iconLabel = new QLabel(this); m_iconLabel->setFixedSize(20, 20); m_iconLabel->setScaledContents(true); m_titleLabel = new QLabel(this); m_titleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_minimizeButton = new QPushButton(this); m_minimizeButton->setFixedSize(27, 22); m_minimizeButton->setObjectName("minimizeButton"); m_maximizeButton = new QPushButton(this); m_maximizeButton->setFixedSize(27, 22); m_maximizeButton->setObjectName("maximizeButton"); m_closeButton = new QPushButton(this); m_closeButton->setFixedSize(27, 22); m_closeButton->setObjectName("closeButton"); QHBoxLayout* layout = new QHBoxLayout; layout->addWidget(m_iconLabel); layout->addStretch(1); layout->addWidget(m_titleLabel); layout->addStretch(1); layout->addWidget(m_minimizeButton); layout->addWidget(m_maximizeButton); layout->addWidget(m_closeButton); setLayout(layout); setProperty("titleBar", true); setObjectName("titleBar"); connect(m_minimizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked())); connect(m_maximizeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked())); connect(m_closeButton, SIGNAL(clicked(bool)), this, SLOT(onClicked())); } void TitleBar::setWindowTitle(const QString &title) { m_titleLabel->setAlignment(Qt::AlignCenter); m_titleLabel->setText(title); } void TitleBar::SetTitleBarIcon(const QString &iconPath) { QPixmap map(iconPath); m_iconLabel->setPixmap(map); } void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) { m_maximizeButton->click(); } void TitleBar::mousePressEvent(QMouseEvent *event) { // 鼠标左键按下事件 if (event->button() == Qt::LeftButton) { // 记录鼠标左键状态 m_leftButtonPressed = true; //记录鼠标在屏幕中的位置 m_start = event->globalPos(); } } void TitleBar::mouseMoveEvent(QMouseEvent *event) { // 持续按住才做对应事件 if(m_leftButtonPressed) { //将父窗体移动到父窗体原来的位置加上鼠标移动的位置:event->globalPos()-m_start parentWidget()->move(parentWidget()->geometry().topLeft() + event->globalPos() - m_start); //将鼠标在屏幕中的位置替换为新的位置 m_start = event->globalPos(); } } void TitleBar::mouseReleaseEvent(QMouseEvent *event) { // 鼠标左键释放 if (event->button() == Qt::LeftButton) { // 记录鼠标状态 m_leftButtonPressed = false; } } bool TitleBar::eventFilter(QObject *obj, QEvent *event) { switch(event->type()) { //设置标题 case QEvent::WindowTitleChange: { QWidget *pWidget = qobject_cast(obj); if (pWidget) { m_titleLabel->setText(pWidget->windowTitle()); return true; } } //设置图标 case QEvent::WindowIconChange: { QWidget *pWidget = qobject_cast(obj); if (pWidget) { QIcon icon = pWidget->windowIcon(); m_iconLabel->setPixmap(icon.pixmap(m_iconLabel->size())); return true; } } // 窗口状态变化、窗口大小变化 case QEvent::WindowStateChange: case QEvent::Resize: updateMaximize(); return true; } return QWidget::eventFilter(obj, event); } void TitleBar::updateMaximize() { QWidget *pWindow = this->window(); if (pWindow->isTopLevel()) { bool bMaximize = pWindow->isMaximized(); if (bMaximize) { m_maximizeButton->setToolTip(tr("Restore")); m_maximizeButton->setProperty("maximizeProperty", "restore"); } else { m_maximizeButton->setProperty("maximizeProperty", "maximize"); m_maximizeButton->setToolTip(tr("Maximize")); } m_maximizeButton->setStyle(QApplication::style()); } } void TitleBar::onClicked() { QPushButton *pButton = qobject_cast(sender()); QWidget *pWindow = this->window(); if (pWindow->isTopLevel()) { if (pButton == m_minimizeButton) { pWindow->showMinimized(); } else if (pButton == m_maximizeButton) { pWindow->isMaximized() ? pWindow->showNormal() : pWindow->showMaximized(); } else if (pButton == m_closeButton) { pWindow->close(); } } }
  QWindowBase.h文件:#ifndef QWINDOWBASE_H #define QWINDOWBASE_H #include  #include  #include  #include "TitleBar.h" /** * @brief 界面组件基类 * @note QWindowBase界面组件主要用作顶层窗口,对于非顶层窗口的界面组件使用QWidget。 */ class QWindowBase : public QFrame { Q_OBJECT public: QWindowBase(QFrame* parent = NULL); /** * @brief 设置标题 * @param title,输入参数,标题内容 */ void setWindowTitle(const QString& title); /** * @brief 设置标题栏的图标 * @param iconPath,输入参数,图标资源路径 */ void SetTitleBarIcon(const QString& iconPath); /** * @brief 获取内容组件对象指针 * @return 返回QWidget* */ QWidget* contentWidget(); /** * @brief 设置标题栏高度 * @param h,输入参数,标题栏高度 */ void setWindowTitleHeight(int h); private: QWidget* m_contentWidget;//内容组件 TitleBar* m_titleBar;//标题栏 QVBoxLayout* m_layout;//布局管理器 }; #endif // QWINDOWBASE_H
  QWindowBase.cpp文件:#include "QWindowBase.h" QWindowBase::QWindowBase(QFrame *parent): QFrame(parent) { setWindowFlags(windowFlags() | Qt::FramelessWindowHint); m_titleBar = new TitleBar(this); m_contentWidget = new QWidget(this); m_contentWidget->setObjectName("Contents"); m_layout = new QVBoxLayout; m_layout->addWidget(m_titleBar); m_layout->addWidget(m_contentWidget); m_layout->setSpacing(0); m_layout->setContentsMargins(0, 0, 0, 0); setLayout(m_layout); } void QWindowBase::setWindowTitle(const QString &title) { m_titleBar->setWindowTitle(title); } void QWindowBase::SetTitleBarIcon(const QString &iconPath) { m_titleBar->SetTitleBarIcon(iconPath); } QWidget *QWindowBase::contentWidget() { return m_contentWidget; } void QWindowBase::setWindowTitleHeight(int h) { m_titleBar->setFixedHeight(h); }
  CommonHelper.h文件:#ifndef COMMONHELPER_H #define COMMONHELPER_H #include  #include  #include  #include  #include  #include  /** * @brief 通用功能辅助类 */ class CommonHelper { public: /** * @brief 为应用程序设置QSS样式表 * @param filepath,输入参数,QSS文件路径 */ static void setStyleSheet(const QString& filepath) { //加载样式文件 QFile qss(filepath); if(qss.open(QFile::ReadOnly)) { QString stylesheet = QLatin1String(qss.readAll()); QString paletteColor = stylesheet.mid(20, 7); qApp->setPalette(QPalette(QColor(paletteColor))); qApp->setStyleSheet(stylesheet); } } }; #endif // COMMONHELPER_H
  点击领取Qt学习资料+视频教程~「链接」
  main.cpp文件:#include  #include "CommonHelper.h" #include "QWindowBase.h" #include  #include  #include  #include  int main(int argc, char *argv[]) { QApplication a(argc, argv); QWindowBase w; w.setWindowTitle("WidgetBase"); QPushButton* button1 = new QPushButton("OK"); QHBoxLayout* hLayout1 = new QHBoxLayout; hLayout1->addStretch(1); hLayout1->addWidget(button1); QVBoxLayout* layout = new QVBoxLayout; QTreeView* treeView = new QTreeView; layout->addWidget(treeView); layout->addLayout(hLayout1); layout->addStretch(1); w.contentWidget()->setLayout(layout); w.setWindowTitleHeight(40); w.show(); CommonHelper::setStyleSheet("://qss/lightblue.qss"); return a.exec(); }
  工程文件:QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = TitleBarDemo TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES +=  main.cpp  TitleBar.cpp  QWindowBase.cpp HEADERS +=  TitleBar.h  CommonHelper.h  QWindowBase.h RESOURCES +=  TitileBarDemo.qrc
  工程目录结构:
  3、自定义窗体基类结果展示
  运行结果:

蕾哈娜办内衣秀,59岁约翰尼德普参演引关注,好在有胡子当地时间11月9日,蕾哈娜所创办的SavageXFenty内衣秀,在流媒体平台上进行了首映,引发了广泛的关注。这是现年34岁的巴巴多斯歌手第四次办内衣秀了,在维多利亚的秘密成为了历明明人老珠黄,非要尬演少女,这些女星我都替她羞有人说得体,在中年演员身上真的是难得的品质。比如说袁泉,在我的前半生中,她饰演的职场女高官唐晶,穿着一身利落的西装,走起路来都带风。不会花里胡哨,虽然有女二的玛丽苏恋爱戏码,但是永郭碧婷的倔强自己选的豪门路,咬着牙也要走下去嫁入豪门是大多数女星的梦想,但嫁入豪门未必幸福,荣华富贵的背后有许多不为人知的心酸。婚前的郭碧婷闪耀着独立女性的光辉,她厌恶女性婚后沦为生育工具,婚后的她放弃事业连生俩娃,并且还有混动汽车省油的秘诀CVT变速箱有多牛?可能有部分消费者对于纯电动汽车的续航有焦虑,在考虑新能源汽车的时候偏向于混动汽车。例如比亚迪汉Dmi丰田凯美瑞双擎本田雅阁混动等车型,拥有内燃机驱动和电机驱动两套动力系统。其实不管新英雄莱西奥技能展示,23技能可滞空释放,首位3D技能英雄上架陌陌聊游戏,给您带来最新最快的王者资讯!相信很多的玩家都已经知道,新英雄莱西奥已经上架了体验服!对于这个新英雄,玩家们还是非常期待的。11月8日晚,新英雄莱西奥终于上架了体验服,不停一下!腾讯资深架构师花10分钟带你彻底摸透SpringBoot核心重点前言在如今的互联网发展前景中,各种业务体系的发展慢慢地变得复杂起来,与此同时这些功能的开发都是在随着变化而不断变化的。我们仍需要保持开发过程的简单性,而这种简单性很大程度上来自开发双11搅局者谁来挑战阿里京东拼多多今年的双11,会有新玩家搅动主流竞技场?没有数字的激烈战报,曾经火药味甚浓的双11,当天猫京东拼多多们在相对低调,抖音快手早已入局之时,B站知乎们似乎也在摩拳擦掌。B站今年向带货直实体店获客新出路现在还有人逛实体店吗?实体店到底有没有出路!当前数字化信息化时代背景下,互联网大数据人工智能如雨后春笋般冒出来,导致传统实体门店人流量持续下降,虽然很多门店一直都在尝试突破和改变。传奇世界被误认为腰带的戒指,挂羊头卖狗肉,没想到却是极品要说传奇世界游戏中的装备,那真的是数不胜数,千奇百怪的装备也不少,而其中最怪的就要数今天要讲的这件了,明明是手镯,却非要把自己伪装成腰带,而且它还把自己的属性都隐藏起来,连玩家本人先涨价再降价,双十一的套路5年未变先把价格涨起来,然后在双十一当天再降到原来正常销售价格,让不知情消费者以为是卖家大降价了,结果被套路了。随着双十一号角吹响,一些剁手党早将心仪商品放在购物车里,等优惠到来。但没想到应变。破局2022,合众致达逐梦。无惧最近华为内部论坛上线了任正非一篇关于整个公司的经营方针要从追求规模转向追求利润和现金流的文章,瞬间引爆了整个朋友圈,寒气扑面而来。任正非判断,全球经济未来十年应该是一个非常痛苦的历38岁的李宇春坐在轮椅上哭了她哭了!才38岁就得了强直性脊柱炎,如今只能无奈地躺在轮椅上度过余生,这是多么痛心的教训!也说明一个人如果平常没有好好爱惜自己健康的身体,在生病再去治疗,有时即使你富可敌国,又有什张檬金恩圣婚礼太浪漫!一个为爱整容一个爱劈腿,这婚姻看点十足最近娱乐圈终于迎来了一件大喜事,那就是女星张檬跟韩国籍男星金恩圣,在三亚举办了他们的婚礼,两位新人也是第一时间就向网友公布了这一喜讯,随后两人还晒出了婚礼现场的照片,网友们不禁感叹2022年5部待播女性剧热依扎你好生活第二,赵丽颖新剧第一女性剧在近些年深受广大观众的喜爱,不仅让女性观众在剧中找到了共情,还有正能量输出,提高了女性地位,这类题材也是最容易出爆款的题材之一。2022年的下半年,大家相继开始出现剧荒,好看眼部受伤后引起的眼口短小眼皮紧绷可以佩戴义眼吗许多义眼需求者都会有眼口发育短小,眼皮紧绷的问题。这种情况多是在幼年时期形成的。在眼部受到意外伤害后,造成了眼球萎缩或眼球摘除,但是并没有及时佩戴义眼片,以至于眼内没有眼内容物的支盘点杨超越在登录圆鱼洲的穿搭超越妹妹长相甜美可爱,多种风格都能完美驾驭,拍出多组出圈大片。这次在登录圆鱼洲走的是可爱甜美风,每套都元气满满,让我们一起来看看吧!第一套是短款白色小香风西装外套来配黑色的蝴蝶花短小凯文格林会越打越好我俩像双胞胎兄弟直播吧10月22日讯火箭队今日常规赛不敌灰熊队,赛后,火箭后卫小凯文波特接受了媒体采访。小凯文波特再次强调,他与杰伦格林会越打越好我们会在一起再战4年,所以我们会越来越好。他是我的回归季的主角们他们的首秀表现如何?20222023赛季NBA的一大主题就是回归,多名知名球星将在这个赛季迎来他们长久以来的首场比赛,随着今日快艇也打完了他们新赛季的首场比赛,回归主题的主角们都已亮相,然而他们的表现大衣下面不一定穿裙子才好看,今年流行这样穿,高级显瘦有气质大衣也算是秋冬季节入手率最高的单品种类了,不仅能穿出洋气拉风的效果,还能很好的修饰身形,任何身材的姐妹都能轻松驾驭。但若是你今年穿大衣还在搭配裙子的话,那你就out了,今年更流行用WTT澳门冠军赛4强出炉央视直播樊振东VS林昀儒,陈幸同VS伊藤(一)(1)WTT澳门冠军赛2022男单14决赛,王楚钦与马龙苦战五局,最终大比分王楚钦以32战胜马龙,晋级四强。五局比分为王楚钦117117911811118马龙。半决赛王楚钦V乔治狂轰40分6板6助,快船两连胜!小卡轮休,勇士最大对手出炉NBA常规赛继续进行,国王主场迎战快船。国王季前赛状态火爆,两胜湖人,一共赢下77分!常规赛开打后,首战不敌开拓者,虽然今夏签下蒙克,换来许尔特,但国王还是缺乏竞争力。快船这边,揭西部排名大乱!爵士领跑,快船第2,勇士掉至第10,湖人火箭垫底头条创作挑战赛NBA西部球队今天有5场比赛,其中3场是西部内战,面对东部的两支球队,马刺客场114105爆冷战胜76人,火箭作客密尔沃基,以105125惨败给了雄鹿。尽管5人得分上
长期熬夜对身体的危害长期熬夜对人体的危害是非常大的,主要包括以下方面1。心脏病风险增加长期熬夜会导致身体内部的生物钟失调,这会引起一系列的生理变化,包括影响心脏的健康。研究表明,长期熬夜会增加患心脏疾一半以上的老年人都缺这些营养素!饮食这样吃,补足营养身体好,老了不发愁我们无法阻止衰老,但可以延缓衰老,合理补充营养素就是一个重要方法。尤其是人上了岁数以后,基础代谢和体力活动水平降低,饮食摄入量难免会减少,但对很多营养素的需求反而增加。这样一来,就足阳明胃经健脾养胃,促进人体自我消化足阳明胃经健脾养胃,促进人体自我消化大家都知道胃主消化,可以把食物消化掉,而且在中医里来讲胃为后天之本,就是日常的饮食营养都是靠胃来供应,所以胃的功能是很重要的。但是讲美容呢,就要肝气郁结时,身体或有这5种症状表现,若你有,要及时调理肝脏是人体当中非常重要的一个消化器官,有着代谢排毒消化等功能。一旦肝脏出现异常的话,身体当中的一些代谢产物和外来毒素就无法顺利排泄,从而影响到整体的健康。在日常生活当中,有很多人会春天调养身体最佳时机,鸡蛋要多吃,推荐5款鸡蛋的经典做法!鸡蛋是一种非常常见的食材,也是营养非常丰富的食品之一。除了可以直接煮熟食用外,还有许多不同的烹饪方法,能够让鸡蛋变得更加美味。下面就介绍5款好吃的鸡蛋做法,供大家参考。一葱油煎蛋葱入春多喝汤,营养又健康,推荐6道好喝的家常汤,健脾养胃身体棒大家好这里是香姐说美食,每天分享好吃的家常菜。不知不觉,又到了春暖花开的季节了,到处都充满了希望。我们人体也从冬天转换到春天了,这个时候需要滋补营养,不能吃太过于油腻的食物,多吃一中国为何香港地铁没有安全检查,而内陆则强制执行地铁安全检查?香港地铁简介香港地铁(又称港铁)作为香港的主要轨道交通系统,由香港地铁有限公司负责运营,于1979年开始建设,1980年首通车。截至2021年,香港地铁总长达90。7公里,共有11别跑空!因设备设施维护,青岛这一场馆暂停参观服务3月11日,青报君从青岛国际会议中心微信公众号获悉,青岛国际会议中心至5月底将暂停参观服务。青岛国际会议中心暂停参观服务公告尊敬的广大市民和游客朋友因展馆设备设施维护,青岛国际会议跨省旅游专列重启山东开行四省联游专列齐鲁网闪电新闻3月12日讯3月12日17时2分,Y494次齐鲁之星旅游专列驶出青岛北站,这是今年山东省开出的首趟旅游专列,730名游客将在14天内游览云南贵州湖南江西的多个景点。1荥阳遛鸟人的鸟事儿鸟世界每天早晨八点左右,走到荥阳市郑上路京城路口西南侧樱花广场樱花林最西头,你总会看到这样一番别样的景致一只只精致的鸟笼高高挂在枝头上,笼内一只只可爱的小精灵上蹿下跳地雀跃着,耳边鸟儿此左右归丸真的比六味地黄丸金匮肾气丸力量要强吗?这样想就错了最近我发现了一个奇怪的事情,有很多人说左归丸右归丸,补肾的力量比六味地黄丸,金匮肾气丸效果要好,所以肾虚了,应该选择左归丸和右归丸,其实这种想法是错的,为什么这样说呢,因为左归丸和