构建Qt界面的工具栏,主要用到QToolBar类

Qt QToolBar
0 66
suoniao 2020-10-20
需要:0索币

1.1新建一个widget工程,不要勾选ui界面设计,然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。

widget.h

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QVBoxLayout>
  5. #include <QHBoxLayout>
  6. #include <QMenu>
  7. #include <QActionGroup>
  8. #include <QPushButton>
  9. #include <QToolBar>
  10. class Widget : public QWidget
  11. {
  12. Q_OBJECT
  13. public:
  14. Widget(QWidget *parent = 0);
  15. void createView();
  16. void addControls();
  17. void craeteToolBar();
  18. void craeteMenu();
  19. private slots:
  20. void On_ClickedMenuActionGroup(QAction *action);
  21. void On_ClickedToolBarActionGroup(QAction *action);
  22. private:
  23. QVBoxLayout *mainLayout;
  24. // QVBoxLayout *mainWidgetLayout;
  25. // QWidget *mainWidget;
  26. QPushButton *m_PushButton;
  27. QMenu *m_Menu;
  28. QToolBar *m_ToolBar;
  29. QActionGroup *m_MenuActionGroup;
  30. QActionGroup *m_ToolBarActionGroup;
  31. QAction *m_ActionMenu1;
  32. QAction *m_ActionMenu2;
  33. QAction *m_ActionToolBar1;
  34. QAction *m_ActionToolBar2;
  35. };
  36. #endif // WIDGET_H

 

widget.cpp

 

  1. #include "widget.h"
  2. #include <QDebug>
  3. Widget::Widget(QWidget *parent)
  4. : QWidget(parent)
  5. {
  6. createView();
  7. }
  8. void Widget::createView()
  9. {
  10. mainLayout = new QVBoxLayout;
  11. this->setLayout(mainLayout);
  12. addControls(); //添加按钮控件
  13. craeteToolBar(); //创建工具栏
  14. craeteMenu(); //创建按钮栏
  15. mainLayout->setMargin(0);
  16. mainLayout->setSpacing(0);
  17. }
  18. void Widget::addControls()
  19. {
  20. //添加控件
  21. m_PushButton = new QPushButton("test");
  22. mainLayout->addWidget(m_PushButton);
  23. }
  24. void Widget::craeteToolBar()
  25. {
  26. //创建工具栏
  27. m_ToolBar = new QToolBar;
  28. m_ToolBarActionGroup = new QActionGroup(this);
  29. QList<QAction*> m_ToolBarList;
  30. m_ActionToolBar1 = new QAction(QStringLiteral("ToolBar1"));
  31. m_ActionToolBar2 = new QAction(QStringLiteral("ToolBar2"));
  32. m_ActionToolBar1->setCheckable(true);
  33. m_ActionToolBar2->setCheckable(true);
  34. m_ToolBarList.append(m_ActionToolBar1);
  35. m_ToolBarList.append(m_ActionToolBar2);
  36. m_ToolBarActionGroup->addAction(m_ActionToolBar1);
  37. m_ToolBarActionGroup->addAction(m_ActionToolBar2);
  38. m_ToolBar->addActions(m_ToolBarList);
  39. m_ToolBar->setStyleSheet("background-color:rgb(200,40,43);color:rgb(204,204,204)");
  40. mainLayout->addWidget(m_ToolBar);
  41. connect(m_ToolBarActionGroup,SIGNAL(triggered(QAction*)),this,SLOT(On_ClickedToolBarActionGroup(QAction *)));
  42. }
  43. void Widget::craeteMenu()
  44. {
  45. //创建菜单栏
  46. m_Menu = new QMenu;
  47. m_MenuActionGroup = new QActionGroup(this);
  48. QList<QAction*> m_MenuList;
  49. m_ActionMenu1 = new QAction(QStringLiteral("Menu1"));
  50. m_ActionMenu2 = new QAction(QStringLiteral("Menu2"));
  51. m_ActionMenu1->setCheckable(true);
  52. m_ActionMenu2->setCheckable(true);
  53. m_MenuList.append(m_ActionMenu1);
  54. m_MenuList.append(m_ActionMenu2);
  55. m_MenuActionGroup->addAction(m_ActionMenu1);
  56. m_MenuActionGroup->addAction(m_ActionMenu2);
  57. connect(m_MenuActionGroup,SIGNAL(triggered(QAction*)),this,SLOT(On_ClickedMenuActionGroup(QAction *)));
  58. m_Menu->addActions(m_MenuList);
  59. mainLayout->addWidget(m_Menu);
  60. }
  61. void Widget::On_ClickedMenuActionGroup(QAction *action)
  62. {
  63. if(action->text().compare(m_ActionMenu1->text())==0)
  64. {
  65. qDebug()<<tr("m_ActionMenu1->text()==%1").arg(m_ActionMenu1->text());
  66. }
  67. else if (action->text().compare(m_ActionMenu2->text())==0)
  68. {
  69. qDebug()<<tr("m_ActionMenu2->text()==%1").arg(m_ActionMenu2->text());
  70. }
  71. }
  72. void Widget::On_ClickedToolBarActionGroup(QAction *action)
  73. {
  74. if(action->text().compare(m_ActionToolBar1->text())==0)
  75. {
  76. qDebug()<<tr("m_ActionToolBar1->text()==%1").arg(m_ActionToolBar1->text());
  77. }
  78. else if (action->text().compare(m_ActionToolBar2->text())==0)
  79. {
  80. qDebug()<<tr("m_ActionToolBar2->text()==%1").arg(m_ActionToolBar2->text());
  81. }
  82. }

 

main.cpp

 

  1. #include "widget.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. Widget w;
  7. w.resize(960,640);
  8. w.show();
  9. return a.exec();
  10. }

 

1.2程序构建运行后,结果如下图所示:

 

总结:

构建界面的工具栏,主要用到QToolBar类,先用函数QToolBar::addAction(QAtion*)或者QToolBar::addActions(QList<QAtion*>)将对应的QAction工具挂载进来。然后将该QToolBar挂载到QWidget上(跟普通的QPushButton一样挂载)。

 

 

参考内容:

http://www.cnblogs.com/findumars/p/4951636.html(重点参考)

http://www.cnblogs.com/grandyang/p/4663277.html(QActionGroup用法)


原文 https://blog.csdn.net/naibozhuan3744/article/details/80855818

回帖
  • 消灭零回复
广告一下
程序员转型,副业赚钱教程
相关主题
Qt实战分布式网盘系统实战Qt文件上传下载 0
Qt5实战教程之翻金币游戏开发 0
利用C++库QT实现秘钥分发系统 秘钥协商 校验 查看服务 0
Qt开发物联网智能网关项目教程 0
Qt开发打地鼠游戏实战 QT学生管理系统实战教程 0
socket notifiers cannot be enabled from another thread错误 0
QProcess::startDetached("cmd.exe")不显示控制台窗口 0
Qt的半自动化内存管理 0
Qt智能指针则可以在退出作用域时智能指针则可以在退出作用域时 0
Qt垃圾回收机制QObjectCleanupHandler 0
QT中建议不要直接Delete掉一个QObject使用deleteLater()函数 0
未找到文件qmlcache_loader.cpp QT编译release版本的时候报错 0
Qt5.12.4requested database does not belong to the calling thread 0
构建Qt界面的工具栏,主要用到QToolBar类 0
QToolButton详细使用图解教程 给主界面添加图标和文字 0
Qt利用QClipboard复制hello suoniao到剪贴板 0
Qt剪切板复制图片和文本的方法将QImage格式复制到剪贴板,QPixmap要比QImage慢 0
QT 提供了QSystemTrayIcon类用于实现程序的托盘。QT提供了托盘示例 0
mainwindow单击关闭按钮不会触发关闭操作,它只是退出 0
addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed 0
相关主题
Qt实战分布式网盘系统实战Qt文件上传下载 0
Qt5实战教程之翻金币游戏开发 0
利用C++库QT实现秘钥分发系统 秘钥协商 校验 查看服务 0
最新C++入门到实战教程 c++实现计算器和QQ登录框 0
Qt开发物联网智能网关项目教程 0
Qt开发打地鼠游戏实战 QT学生管理系统实战教程 0
大龄程序员转型、程序员副业赚钱实战教程合集 0
程序员副业赚钱之抖音短视频制作实战教程 0
程序员副业赚钱之程序员投资赚钱实战教程 0
程序员副业赚钱之利用抖音短视频获取收入实战 0
程序员副业赚钱之抖音电商实战教程 0
程序员副业赚钱之利用豆瓣引流赚钱实战 0
程序员副业赚钱之抓住自媒体风口月入过万不是问题今日头条实战 0
程序员副业赚钱之靠搬运视频赚钱实战 0
程序员副业赚钱之靠写作技术文章实现收益 写作教程 0
程序员副业赚钱之利用知乎引流实现月入过万实战 0
程序员副业赚钱之利用个人IP打造月入5万项目 0
程序员副业赚钱之利用社群营销 打造躺赚个人号 0
程序员副业赚钱之靠运行公众号月入10万多哦 0
程序员副业赚钱之打造一个赚钱的快手号 0