工具箱有两种实现方式,一是运用工具栏QToolBar,二是运用QButtonGroup,在按钮组内创建多个QPushButton,每个按钮对应不同的槽函数。

  本节的“工具箱”窗口是QDockWidget类型,通过在停靠窗口上添加控件来实现工具箱功能。


代码

在头文件中添加

private:int drawType;                               // 绘制类型QButtonGroup *toolButtonGroup;              // 按钮组void ToolWin();                             // 工具箱窗口private slots :void toolButtonClicked(int id);             // 绘图槽函数ButtonGroup

在CPP文件的构造函数中添加

mainWindow::mainWindow(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);   ......ToolWin();      // 工具箱窗口
}void mainWindow::ToolWin()                              // 工具箱窗口
{//dock_Tool = new QDockWidget(tr("工具箱"), this);             // 工具栏//dock_Tool->setFeatures(QDockWidget::DockWidgetClosable);QPushButton *button_pen = new QPushButton(QIcon("../Image/toolbox/Painbrush.png"), tr(""), this);button_pen->setFixedSize(35, 35);button_pen->setToolTip(tr("钢笔"));button_pen->setObjectName("customButton");QPushButton *button_line = new QPushButton(QIcon("../Image/toolbox/Line.png"), tr(""), this);button_line->setFixedSize(35, 35);button_line->setToolTip(tr("线条"));button_line->setObjectName("customButton");QPushButton *button_circle = new QPushButton(QIcon("../Image/toolbox/Circle.png"), tr(""), this);button_circle->setFixedSize(35, 35);button_circle->setToolTip(tr("圆形"));button_circle->setObjectName("customButton");QPushButton *button_ellipse = new QPushButton(QIcon("../Image/toolbox/Elipse.png"), tr(""), this);button_ellipse->setFixedSize(35, 35);button_ellipse->setToolTip(tr("椭圆"));button_ellipse->setObjectName("customButton");QPushButton *button_triangle = new QPushButton(QIcon("../Image/toolbox/Triangle.png"), tr(""), this);button_triangle->setFixedSize(35, 35);button_triangle->setToolTip(tr("三角形"));button_triangle->setObjectName("customButton");QPushButton *button_rhombus = new QPushButton(QIcon("../Image/toolbox/Rhombus.png"), tr(""), this);button_rhombus->setFixedSize(35, 35);button_rhombus->setToolTip(tr("菱形"));button_rhombus->setObjectName("customButton");QPushButton *button_rect = new QPushButton(QIcon("../Image/toolbox/Rectangle.png"), tr(""), this);button_rect->setFixedSize(35, 35);button_rect->setToolTip(tr("长方形"));button_rect->setObjectName("customButton");QPushButton *button_square = new QPushButton(QIcon("../Image/toolbox/Square.png"), tr(""), this);button_square->setFixedSize(35, 35);button_square->setToolTip(tr("正方形"));button_square->setObjectName("customButton");QPushButton *button_hexagon = new QPushButton(QIcon("../Image/toolbox/Hexagon.png"), tr(""), this);button_hexagon->setFixedSize(35, 35);button_hexagon->setToolTip(tr("六边形"));button_hexagon->setObjectName("customButton");QGridLayout *toolLayout = new QGridLayout();toolLayout->setAlignment(Qt::AlignTop);toolLayout->addWidget(button_pen, 0, 0);toolLayout->addWidget(button_line, 0, 1);toolLayout->addWidget(button_ellipse, 1, 1);toolLayout->addWidget(button_circle, 1, 0);toolLayout->addWidget(button_triangle, 2, 0);toolLayout->addWidget(button_rhombus, 2, 1);toolLayout->addWidget(button_rect, 3, 0);toolLayout->addWidget(button_square, 3, 1);toolLayout->addWidget(button_hexagon, 4, 0);QWidget *toolWidget = new QWidget(dock_Tool);toolWidget->setLayout(toolLayout);dock_Tool->setWidget(toolWidget);// 按钮组 QButtonGrouptoolButtonGroup = new QButtonGroup();toolButtonGroup->addButton(button_pen, 1);              // 自动分配的id为复数,从-2开始,toolButtonGroup->addButton(button_line, 2);             // 最好自己指定id,使用正数以避免冲突。toolButtonGroup->addButton(button_ellipse, 3);toolButtonGroup->addButton(button_circle, 4);toolButtonGroup->addButton(button_triangle, 5);toolButtonGroup->addButton(button_rhombus, 6);toolButtonGroup->addButton(button_rect, 7);toolButtonGroup->addButton(button_square, 8);toolButtonGroup->addButton(button_hexagon, 9);connect(toolButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(toolButtonClicked(int)));       // 按钮组的槽函数
}// 绘图槽函数ButtonGroup
void mainWindow::toolButtonClicked(int id)
{QList<QAbstractButton *> buttons = toolButtonGroup->buttons();foreach(QAbstractButton *button, buttons){if (toolButtonGroup->button(id) != button)  // 按钮组内其它按钮设置为不可用button->setChecked(false);else if (drawType == id)                    // 如果绘制类型与前次相同,则退出绘制模式drawType = 0;elsedrawType = id;}switch (drawType){case 0:QMessageBox::information(this, tr("绘制"), tr("退出绘制模式!"));    // 后续将改为绘制功能函数break;              case 1:QMessageBox::information(this, tr("绘制"), tr("钢笔!"));    break;case 2:QMessageBox::information(this, tr("绘制"), tr("线条!"));    break;case 3:QMessageBox::information(this, tr("绘制"), tr("椭圆形!"));   break;case 4:QMessageBox::information(this, tr("绘制"), tr("圆形!"));    break;case 5:QMessageBox::information(this, tr("绘制"), tr("三角形!"));   break;case 6:QMessageBox::information(this, tr("绘制"), tr("菱形!"));    break;case 7:QMessageBox::information(this, tr("绘制"), tr("长方形!"));   break;case 8:QMessageBox::information(this, tr("绘制"), tr("正方形!"));   break;case 9:QMessageBox::information(this, tr("绘制"), tr("六边形!"));   break;default:break;}
}

【QT】QT从零入门教程(十二):实现工具箱QButtonGroup相关推荐

  1. 【QT】QT从零入门教程(十六):QSS样式表

      实现一个软件的基本界面和功能后,接下来要做的就是美化界面,这就用到了QSS样式表.   QSS包含了一个样式规则序列,一个样式规则由一个选择器和声明组成,选择器指定哪些部件由规则影响,声明指定哪些 ...

  2. 【QT】QT从零入门教程(十五):QImage和Mat的转换

      QT处理图像用的是QImage类,而OpenCV处理图像则是使用cv::Mat类,如果要在QT中运用OpenCV,那就需要进行QImage和Mat的相互转换. // cv::Mat转换成QImag ...

  3. 【QT】QT从零入门教程(十四):标准颜色对话框类QColorDialog

      Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,本节要讲的是颜色对话框QColorDialog,它是在标准文件对话框的基础之上添加一些布局实现的. 测试程序: QColor color ...

  4. 【QT】QT从零入门教程(十):QT布局管理QLayout

      介绍完常用控件之后,我们发现,之前控件的大小位置都是通过resize().move()来设置的,很不方便,当你修改某个控件的位置时,其他控件也需要进行调整,容易出现牵一发而动全身的情况.   QT ...

  5. Picasso入门教程(十二)Cache Indicators,Logging Stats

    Picasso的内存缓存机制特别棒,尤其是当你需要处理大量的图片的时候.这篇博客中,我们将介绍一下如何检验自己的定制是成功的. Cache Indicators 如果你没有跳过之前的博客,你应该知道P ...

  6. PyQt5教程(十二)——实现QQ登录界面(六、实现鼠标拖动界面,鼠标事件)

    PyQt5教程(十二)--实现QQ登录界面(五.实现鼠标拖动界面,鼠标事件) 一.实现界面可以随着鼠标进行拖动 1.主要就是对鼠标事件的实现: def mousePressEvent(self, ev ...

  7. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨 ...

  9. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨) ...

最新文章

  1. 百年名校史上第一桩:博士论文抄袭,剥夺学位,涉事中国学者已在国内教书7年...
  2. 引导扇区维护工具linux,BOOTICE(引导扇区维护工具)
  3. android面试之fragment,当你面试的时候,被问到关于Fragment的种种
  4. 创意三维c4d形式设计节气海报学习案例
  5. 设计模式之Facade---外观模式
  6. Python学习之路28-符合Python风格的对象
  7. mysql书单推荐_MySQL零基础入门推荐书籍?
  8. QT ——添加多国语言
  9. 金融数据分析期末报告:基于时间序列的回归模型及其应用
  10. 自定义 Oh My Zsh 主题 cchi.zsh-theme
  11. 大数据小项目之电视收视率企业项目03
  12. Magento compare products ajax
  13. NOI OJ 1.3 15:苹果和虫子 C语言
  14. 搜索计算机文件夹的记录怎么删除,怎样删除电脑最近打开的文件或文件夹?
  15. Centos7.4配置与管理DNS服务器
  16. 前端--鼠标跟随特效
  17. 408计算机先学哪个,408计算机考研视频课哪个好
  18. 三、软考·系统架构师——计算机网络基础
  19. NanoDet目标检测新网络!比YOLO跑的还快
  20. 使用python计算复信号的DFT

热门文章

  1. 如何用Linux搭建家庭云服务,使用ownCloud在Linux安装你的个人云服务 私有云的搭建...
  2. HNU 实验七 字符串 E-mail地址
  3. s7300plc串口通信_西门子PLC300串口通信协议比较与分析
  4. 分拆素数和(杭电2098)
  5. 4-2 面向复用的软件构造技术
  6. 配置一台用于深度学习的个人工作站系统的实验记录[主机可以买现成的或自己配,裸机即可]
  7. 突击计划——求数列之和
  8. Python中if __name__=='__main__': 理解与总结(看这篇就够了,一文扫清疑惑!)
  9. 面试—每日一题(1)
  10. 【更新】火星人敏捷开发手册2012-02-24新增敏捷计划内容