BB10动态创建Button并响应单击事件(C++版本)
现在在我的项目中需要用到这样一个功能:从数据文件中读取出数量不等的字符串,然后根据字符串的个数动态添加相应的按钮到主界面中,并且要求根据不同按钮的单击事件执行不同的代码。
//不会使用CSDN的code管理项目,只好上传代码片了
要下载完整源文件,请访问Code项目地址
首先新建一个空白项目,项目名称输入DynamicButtons,其它全部默认即可;
项目新建完成后找到 DynamicButtons.pro 文件双击打开,在其中增加一行内容,如下:
LIBS += -lbbsystem
然后根据代码片中的文件名,分别替换项目中对应文件的内容即可。
#include "applicationui.hpp" #include #include #include #include #include #include using namespace bb::cascades; using namespace bb::system; void ApplicationUI::handleClicked() { Button *button=qobject_cast
(sender()); for(int i=0; isize(); i++) { QString objName=m_List[i]; if(button->objectName()==objName) { SystemToast tips; tips.setBody("\"" + objName + "\" clicked"); tips.setAutoUpdateEnabled(true); tips.exec(); qDebug() << objName << "clicked"; break; } } } void ApplicationUI::init(QObject* container) { m_Container=dynamic_cast(container); } ApplicationUI::ApplicationUI(bb::cascades::Application *app) : QObject(app) { m_pTranslator = new QTranslator(this); m_pLocaleHandler = new LocaleHandler(this); bool res = QObject::connect(m_pLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged())); Q_ASSERT(res); Q_UNUSED(res); onSystemLanguageChanged(); QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this); qml->setContextProperty("_app", this); //要在qml中调用类方法这一步是关键,必须要在createRootObject之前调用 AbstractPane *root = qml->createRootObject(); app->setScene(root); for(int i=0; i<10; i++) { m_List[i]="This is Button " + QString::number(i, 10); m_Buttons[i].create(); m_Buttons[i].setText(m_List[i]); m_Buttons[i].setHorizontalAlignment(HorizontalAlignment::Center); m_Buttons[i].setObjectName(m_List[i]); bool connectResult; Q_UNUSED(connectResult); connectResult=QObject::connect(&m_Buttons[i], SIGNAL(clicked()), this, SLOT(handleClicked())); Q_ASSERT(connectResult); m_Container->add(&m_Buttons[i]); } } void ApplicationUI::onSystemLanguageChanged() { QCoreApplication::instance()->removeTranslator(m_pTranslator); QString locale_string = QLocale().name(); QString file_name = QString("DynamicButtons_%1").arg(locale_string); if (m_pTranslator->load(file_name, "app/native/qm")) { QCoreApplication::instance()->installTranslator(m_pTranslator); } } #include #include #include #include "applicationui.hpp" #include #include #include #include using namespace bb::cascades; void myMessageOutput(QtMsgType type, const char *msg) { switch (type) { case QtDebugMsg: fprintf(stderr, "Debug: %s\n", msg); break; case QtWarningMsg: fprintf(stderr, "Warning: %s\n", msg); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s\n", msg); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s\n", msg); abort(); } } Q_DECL_EXPORT int main(int argc, char **argv) { qInstallMsgHandler(myMessageOutput); qmlRegisterType("bb.system", 1, 0, "SystemToast"); Application app(argc, argv); new ApplicationUI(&app); return Application::exec(); } #ifndef ApplicationUI_HPP_ #define ApplicationUI_HPP_ #include #include #include namespace bb { namespace cascades { class Application; class LocaleHandler; class Container; } } class QTranslator; class ApplicationUI : public QObject { Q_OBJECT public: ApplicationUI(bb::cascades::Application *app); virtual ~ApplicationUI() { } Q_INVOKABLE void init(QObject *container); public slots: void handleClicked(); //自定义的事件槽,用于接收处理按钮单击事件 private slots: void onSystemLanguageChanged(); private: QTranslator* m_pTranslator; bb::cascades::LocaleHandler* m_pLocaleHandler; bb::cascades::Container* m_Container; bb::cascades::Button m_Buttons[10]; QString m_List[10]; }; #endif import bb.cascades 1.2 Page { onCreationCompleted: { _app.init(container); //窗口创建完成后调用类,以实现C++与QML相互调用 } Container { id: container topPadding: 20.0 } }
文章参考:
- BB10: Handling Several Buttons Click Event in CPP
- QObject * QObject::sender () const
BB10动态创建Button并响应单击事件(C++版本)相关推荐
- MFC中动态创建button及添加响应事件
MFC中动态创建button及添加响应的事件,主要步骤如下: 1.在头文件(**Dlg.h)中添加一个CButton类型, 例如:CButton btn; 2.在(**Dlg.cpp)的OnIn ...
- js给动态创建出来的元素添加事件
场景:因为js都是dom操作,所以如果动态创建一个元素的话,本身是不带自身事件的,因为在创建这个元素前,dom已经创建完成了,所以在动态创建出来的元素身上不包含事件 所以我们需要给这些动态创建出来的元 ...
- MFC中动态创建控件以及添加事件响应
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...
- VB.net 动态添加菜单响应单击事件
以前 VB 6.0 我要调一堆 API 感觉好过瘾 呵呵 现在找不到这种感觉了 哈!记得vb 6 的 时候生气用Win32写了个Clock 掉了上百个 API 连VB 6 的窗体都没用, 那个叫过瘾 ...
- MFC 鼠标双击响应单击事件
最近做练习双击鼠标左键时老是相应单击事件,网上查询和自我探索后解决问题,代码如下: 我写的代码为单击鼠标左键确定圆心,鼠标移动时产生橡皮筋线,双击鼠标结束,单双击鼠标之间的距离为圆的半径 void C ...
- js 动态生成button 并设置click事件
<div id="MyDiv"></div> <script> function AddButton() {var MyDiv =documen ...
- C#,桌面编程入门(01)——按钮Button属性与事件、动态创建、快捷键、控件数组及自定义Button
本文是<桌面编程入门>系列文章的开山之篇. <桌面编程入门>系列文章主要介绍桌面编程的各种组件,Button,ComboBox,Panel,WebBrowser...... 类 ...
- MFC动态创建控件并响应事件代码实现过程
MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下. 1.创建对象 用new进行动态创建一个对象.然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGet ...
- 禁用a标签的单击事件响应
a标签默认有各种状态,例如:光标悬浮在a标签上时(hover).光标按下时(active).光标按下后即访问过(visited).默认状态(link),a标签默认能响应鼠标单击,当光标单击是默认打开h ...
最新文章
- DataGridView 密码列(显示为*号)的设置
- SQL Server学习1(建数据库,建表,建约束)
- Oracle 9i默认表空间
- opencv提取Mat中的某些行和列
- 【机器学习入门笔记15:BP神经网络逼近股票收盘价格2】20190218
- codevs 2865 天平系统1
- ffplay.c学习-1-框架及数据结构
- halcon read_ocr_trainf 从文件中读取训练字符并转换为图像
- exe打包工具哪个最好_一键分发工具哪个最好用?这款30万人都在用,很优秀!...
- java智能提示_【Java】智能提示的设置
- @程序员,React 使用如何避坑?
- ansible的介绍和一些基本模块介绍
- win10PPT不支持Flash动画
- 迅盘从入门到精通 彻底告别WIN7关机烦恼 T400亲测
- 使用matlab进行简单图像处理
- 计算机毕业设计(附源码)python-志愿者管理系统
- matlab绘制叮当猫
- 网络:CGI程序制作
- 从一个例子来看Tagged Pointer特性
- The Rust Programming Language - 第14章 更多关于Cargo和Crates.io的内容 - 14.2 将crate发布到Crate.io
热门文章
- JSP Java 期末复习整理
- linux下安装搜狗输入法(网上找的资料)
- PF-EPF-UPF的对比仿真
- 蓝叠、逍遥、夜游模拟器,虚拟机与hyper-v兼容问题解决,w10家庭版关闭hyper-v,华为matebook开启vt
- ios内购二次验证安全性问题_苹果IOS内购二次验证返回state为21002的坑
- 数电课设——555定时器设计数字时钟
- 安卓应用测试-ADB
- 9-2 什么是零点漂移 产生零点漂移的主要原因是什么 差动放大电路为什么能抑制零点漂移
- Lynda Audition CC 2018 Essential Training 中文字幕
- 牛啊!全球当下最厉害的 14 位程序员