学习qte5,02

dmd+QtE5+Qt-5运行时三样来写界面.用QtE5时,最好了解Qt的工作原理,目标是制作足够日常任务子集,简化到极致.方法和类名QT差不多.对新手,简单,易于组装,速度及巨大可能性.

// dmd ex2 qte5//示例
import qte5;
import core.runtime;

int main(string[]args){
     // 加载库
     if(1==LoadQt(dll.QtE5Widgets,true))return1;
     // 创建应用
     QApplicationapp=new QApplication(&Runtime.cArgs.argc,Runtime.cArgs.argv,1);
     // 创建标签框
     QLabel lb =new QLabel(null);
     // 插入文本,支持`超文本`.
     lb.setText("<h1>哈哈</h1>").show();
     app.exec();
     return 0;
}

//编译命令:dmd ex2 qte5

注意,简单的编译命令,极致编译速度,非常详细的Qt文档.
无需安装完整版Qt5.安装RunTime版就够了.仅*.dll/so.
QtE5.QAction()--替换C++元编译器
QAction自身具有很多属性.在(qte5widgets.h)中继承它并定义了一组现成插槽(slot).并引入被调函数地址,即在此位置激活插槽时,调用函数,的属性.每个QAction存储一组槽和处理器的地址.
slot只是进一步调用地址存储在QAction中的extern (C)connect(),
Qt===>Slot{QAction.QtE5}===>extern(C)OurFunction()===>类方法
必须记住实例地址,用构造来保存实例地址.
不仅仅传方法,还要传实例地址.

QWidget win=QWidget(...);
win.savethis(&win);
//对象可存储`自身`引用.

利用该信息:

QAction acHelp = new QAction(&handler,aThis());
//1为处理器,2为实例地址.

处理器包含以下结构:

extern (C) void acFun1(cast(classname*)uk,...){
      (*uk).MethodName(...);
}

只是临时函数,因为无元编译器.缺点是预定义时隙集合有限的.不能提前确定所有参数选项.
QtE5中另外定义了参数数的有趣插槽.

QAction actNtest = new QAction(HandlerAdd,InstanceAdd,n);

现在绑定信号到"slotN()“而非”slot()".允许同一处理器按参数传递内容,调用不同QAction.要处理许多相同按钮时,非常有用.
插槽名是预定义的,可在参数中使用连接(),通过参数按串连接,插槽类型:

串表示意思
"Slot()"简单插槽.
"SlotN()"插槽有个附加参数.
"Slot_Bool(bool)"槽从bool信号中抛参数
"Slot_Int(int)".

注意,extern(C)是必须的.但Qt信号可以有事件参数,怎么办?有个QEvent实例参数(指针).可在此查看预定义插槽名.
connect()参数中,写上"Slot_int(int)",则激活插槽.从信号中取,并按该参调用函数.
像指挥棒一样,传递信号中参数给处理器.
可在不用C++,就定义具不同参数集的插槽.一组十个不同选项几乎涵盖了所有信号.

posted @   zjh6  阅读(19)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示