提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2024-09-27 10:22:17.097|阅读 12 次
概述:本文主要介绍如何在在Qt应用程序中使用Wacom平板电脑,欢迎下载最新版组件体验~
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。
当您在平板电脑上使用Qt应用程序时, s就会生成。如果您想处理tablet事件,需要重新实现tabletEvent()事件处理程序。当用于绘图的工具(触控笔)进入并离开写字板附近时(即,当它关闭但未按下时),当工具被按下并从中释放时,当工具在写字板上移动时,以及当工具上的一个按钮被按下或释放时,都会产生事件。
中可用的信息取决于所使用的设备,本实例可以处理多达三种不同绘图工具的平板电脑:触控笔、喷枪和艺术笔。对于这些事件,将包含工具的位置,平板电脑上的压力、按钮状态、垂直倾斜和水平倾斜(即设备与平板电脑垂直方向之间的角度,如果平板电脑硬件可以提供)。喷枪有指轮,这个位置也可以在平板电脑事件中找到;艺术笔提供围绕垂直于平板表面的轴旋转,因此它可以用于书法。
在这个例子中,我们实现了一个绘图程序。您可以用触控笔在平板电脑上画画,就像在纸上用铅笔一样。当用喷枪画画时,会得到一种虚拟的油漆喷雾,手指轮用来改变喷雾的密度。当您用美术笔绘制时,会得到一条线,它的宽度和端点角度取决于笔的旋转,压力和倾斜也可以被分配来改变颜色的alpha和饱和度值以及笔画的宽度。
本示例包括以下内容:
Qt技术交流群:166830288 欢迎一起进群讨论
MainWindow创建一个TabletCanvas,并将其设置为中心小部件。
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(TabletCanvas *canvas); private slots: void setBrushColor(); void setAlphaValuator(QAction *action); void setLineWidthValuator(QAction *action); void setSaturationValuator(QAction *action); void setEventCompression(bool compress); bool save(); void load(); void clear(); void about(); private: void createMenus(); TabletCanvas *m_canvas; QColorDialog *m_colorDialog = nullptr; };
createMenus()用操作设置菜单,我们有一个QActionGroup用于分别改变alpha通道、颜色饱和度和线宽的操作。操作组连接到setAlphaValuator()、setSaturationValuator()和setLineWidthValuator()插槽,它们调用TabletCanvas中的函数。
我们从构造函数MainWindow()开始:
MainWindow::MainWindow(TabletCanvas *canvas) : m_canvas(canvas) { createMenus(); setWindowTitle(tr("Tablet Example")); setCentralWidget(m_canvas); QCoreApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents); } 在构造函数中,我们调用createMenus()来创建所有的操作和菜单,并将画布设置为中心小部件。 MainWindow::MainWindow(TabletCanvas *canvas) : m_canvas(canvas) { createMenus(); setWindowTitle(tr("Tablet Example")); setCentralWidget(m_canvas); QCoreApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents); }
在createMenus()的开头,我们填充了File菜单。使用在Qt 5.6中引入的()的重载来创建带有快捷方式(也可以是图标)的菜单项,将其添加到菜单中,并将其连接到插槽,所有这些都只需要一行代码,使用QKeySequence为这些常用菜单项获取特定于平台的标准快捷键。
我们还填充了画笔菜单,更改笔刷的命令通常没有标准的快捷方式,因此使用tr()来翻译快捷方式以及应用程序的语言翻译。
现在,我们将在Tablet菜单的子菜单中创建一组互斥操作,用于选择每个 QMenu *alphaChannelMenu = tabletMenu->addMenu(tr("&Alpha Channel"));
QAction *alphaChannelPressureAction = alphaChannelMenu->addAction(tr("&Pressure")); alphaChannelPressureAction->setData(TabletCanvas::PressureValuator); alphaChannelPressureAction->setCheckable(true); QAction *alphaChannelTangentialPressureAction = alphaChannelMenu->addAction(tr("T&angential Pressure")); alphaChannelTangentialPressureAction->setData(TabletCanvas::TangentialPressureValuator); alphaChannelTangentialPressureAction->setCheckable(true); alphaChannelTangentialPressureAction->setChecked(true); QAction *alphaChannelTiltAction = alphaChannelMenu->addAction(tr("&Tilt")); alphaChannelTiltAction->setData(TabletCanvas::TiltValuator); alphaChannelTiltAction->setCheckable(true); QAction *noAlphaChannelAction = alphaChannelMenu->addAction(tr("No Alpha Channel")); noAlphaChannelAction->setData(TabletCanvas::NoValuator); noAlphaChannelAction->setCheckable(true); QActionGroup *alphaChannelGroup = new QActionGroup(this); alphaChannelGroup->addAction(alphaChannelPressureAction); alphaChannelGroup->addAction(alphaChannelTangentialPressureAction); alphaChannelGroup->addAction(alphaChannelTiltAction); alphaChannelGroup->addAction(noAlphaChannelAction); connect(alphaChannelGroup, &QActionGroup::triggered, this, &MainWindow::setAlphaValuator);
我们希望用户能够选择绘画颜色的alpha分量是否应该通过平板压力、倾斜或喷枪工具上拇指轮的位置来调节。对每个选择都有一个操作,另外一个操作是选择不改变alpha,也就是说,保持颜色不透明。我们让操作可检查,然后alphaChannelGroup将确保在任何时候只检查一个操作。当一个操作被检查时,triggered()信号从组中发出,因此我们将其连接到MainWindow::setAlphaValuator(),它将需要知道从现在开始关注的哪个属性(估值器),因此使用属性来传递此信息。(为了实现这一点,枚举Valuator必须是一个注册元类型,以便它可以插入到中。这是通过tabletcanvas.h中的Q_ENUM声明完成的。)
下面是setAlphaValuator()的实现:
void MainWindow::setAlphaValuator(QAction *action) { m_canvas->setAlphaChannelValuator(qvariant_cast<TabletCanvas::Valuator>(action->data())); }
它只需要从()中检索Valuator枚举,并将其传递给tablecanvas::setAlphaChannelValuator()。如果不使用data属性,则需要比较指针本身,例如在switch语句中。但这需要在类变量中保留指向每个的指针,以便进行比较。
下面是setBrushColor()的实现:
void MainWindow::setBrushColor() { if (!m_colorDialog) { m_colorDialog = new QColorDialog(this); m_colorDialog->setModal(false); m_colorDialog->setCurrentColor(m_canvas->color()); connect(m_colorDialog, &QColorDialog::colorSelected, m_canvas, &TabletCanvas::setColor); } m_colorDialog->setVisible(true); }
我们在用户第一次选择画笔颜色时延迟初始化QColorDialog,从菜单或通过操作快捷方式。当对话框打开时,每次用户选择不同的颜色时,TabletCanvas::setColor()将被调用来更改绘图颜色。因为它是一个非模态对话框,所以用户可以自由地让颜色对话框保持打开状态,以便能够方便而频繁地更改颜色,或者关闭它并稍后重新打开它。
下面是save()的实现:
bool MainWindow::save() { QString path = QDir::currentPath() + "/untitled.png"; QString fileName = QFileDialog::getSaveFileName(this, tr("Save Picture"), path); bool success = m_canvas->saveImage(fileName); if (!success) QMessageBox::information(this, "Error Saving Picture", "Could not save the image"); return success; }
我们使用QFileDialog让用户选择一个文件来保存绘图,然后调用TabletCanvas::saveImage()将其实际写入文件。
下面是load()的实现:
void MainWindow::load() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Picture"), QDir::currentPath()); if (!m_canvas->loadImage(fileName)) QMessageBox::information(this, "Error Opening Picture", "Could not open picture"); }
我们让用户选择要用QFileDialog打开的图像文件,然后要求画布使用loadImage()加载图像。
下面是about()的实现:
void MainWindow::about() { QMessageBox::about(this, tr("About Tablet Example"), tr("This example shows how to use a graphics drawing tablet in Qt.")); }
我们将显示一个消息框,其中包含对示例的简短描述。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:慧都网模拟Microsoft Dynamics CRM-2016/Office 365导航界面和一组控件改善Qt.C ++应用程序用户体验的QtitanNavigation组件。
本文将探讨如何使用 Spire.XLS for .NET 在 C# 程序中导入 Excel 数据到数据库以及导出数据库到 Excel 文件,实现数据在 Excel 和数据库之间无缝流转。
在本文中,我们将向您展示如何逐步执行此操作,告诉您什么是 SCORM,为什么需要使用它,并列出我们测试过的最佳 SCORM 转换工具之一——iSpring Suite。
本文主要介绍如何使用Kendo UI for Angular组件的ListView来构建带有图表的仪表板,欢迎下载新版控件体验!
在本文中,您将学习如何使用Spire.PDF for .NET在 C# 中向 PDF 文档添加页码。
一个跨平台的C++图形用户界面应用程序开发框架。
QtitanRibbon专业全面 & 实现Qt技术的跨平台Ribbon UI组件
QtitanDataGrid一个独特的Qt开发框架产品,吸收了Delphi、C++以及其他语言的优点
QtitanNavigation模拟Microsoft Dynamics CRM-2016/Office 365导航界面和一组控件改善Qt.C ++应用程序用户体验的QtitanNavigation组件。
QtitanDocking一个用于允许创建类似于Microsoft可停靠用户界面的Qt框架组件。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢