主页

Android 学习笔记 000:创建 Android UI

概述 所有界面都是由 View(微件)和 ViewGroup(布局)对象构建出来的。 View 类是所有控件的基类,TextView、Button 等 View 也是 ViewGroup 的基类 如上图,再复杂的界面也是一层一层包裹嵌套组成的。应使控件之间关系清晰简单,能提升性能。 两种写界面的方法 在 XML 文件中声明界面元素 在工程目录的 res/layout/ 路径下新建 .xml 文件。 在代码中实例化布局元素 代码中加载界面文件 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance...

阅读更多

QML 中如何捕获键盘事件?

比如你想要捕获 Ctrl+C 用来复制文件,应该怎么办? 方法一、KeyEvent Item { focus: true Keys.onPressed: { if ((event.key == Qt.Key_C) && (event.modifiers & Qt.ControlModifier)) doSomething(); } } 这种方法的缺点在于需要焦点在,但是很多时候都无法保证焦点在。 方法二、事件过滤 用 C++ 方法在 QML 中注册一个类型或通过上下文(QQmlContext)将 C++ 数据暴露给 QML 引擎,并将 Windows 窗口设为被监听的对象,就可以全局监听...

阅读更多

Qt QML 中各模块版本整理

Qt QML 中有许多模块,每模块又有许多版本,傻傻分不清楚。 Qt QtQml QtQml.Models QtQuick QtQuick.Controls QtQuick.Layouts QtQuick.Dialogs QtQuick.Particles 4.7.1     1.0         4.7.4     1.1       ...

阅读更多

为什么继承自 QWidget 的自定义控件无法显示背景图片?

你可能遇到过在 Qt Designer 中新建一个继承自 QWidget 的 Qt 设计师界面类 或者手动写一个 QWidget 的派生类时,设置它的背景样式没有生效的情况。 由于是 QWidget 的派生类,我们先看看 QWidget 的 样式参考 : If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below: void CustomWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter p(thi...

阅读更多

Qt 核心之对象模型、对象树以及对象所有权

为什么需要对象模型? GUI 编程中通常需要管理相当多的对象,Qt 提供的对象模型结合了标准 C++ 的运行效率及它所没有的高灵活性。说白了,是因为标准 C++ 没有提供 Qt GUI 编程所需的对象模型,Qt 才设计出自己的对象模型(Qt Object Model)的。 Qt 向 C++ 扩展出以下功能: 一个强大地无缝对象通信机制:信号与槽 可查询和可设计的对象属性 强大的事件和事件过滤器 用于国际化的多语言翻译机制 一个内部计时器 一个受保护的指针(QPoint),当它指向的对象被析构后自动置为 0 以上这些功能是基于 QObject 的,也就是说基于 Qt 基类的。这样设计出的 Qt 对象模型才能实现上面的这些功能。 把 Qt 对象当作标识...

阅读更多

Qt 核心之属性系统

属性可以是通常的位置(x/y)、宽高(width/height)或者颜色(color)等,也可以是某种特定类型,比如单选框的选中状态(checked)。一个类的属性通常是指它的成员变量。这些属性有它自己的一些行为,比如读取(read)、设置(set)、变化通知(notify signal)等。用来管理这些行为的系统称为属性系统,Qt 的属性系统是基于元对象系统的。 Qt 的属性系统主要有以下方面的应用: 用于 Qt Designer,提供属性的编辑。 与 QtScript 集成。 现在广泛用于 QML 中,用于获取 C++ 对象。 怎样声明属性? 用 Q_PROPERTY() 宏声明,它是定义在 QObject 类中的宏,所以只有 QObject 类或者继承自它...

阅读更多

Qt 核心之元对象系统

Qt 的元对象系统(The Meta-Object System)由它的元对象编译器(Meta-Object Compiler,moc)帮忙实现,moc 通过读取头文件中的 Q_OBJCET 宏来判断是否需要生成元对象代码。如果需要,则生成以 moc_ 开头的源文件,在连接(Linking)时会和源文件一起生成可执行文件。 是什么 从 Qt 新增的关键字(signals、slots、emit)可以看出 Qt 并不是标准的 C++ 语言,而是对其进行了一定程度的扩展。 元对象系统是 Qt 核心的一部分,用于支持 Qt 的 C++ 扩展(Qt’s C++ extensions),它提供了用于对象间通信的信号与槽、运行时类型信息以及动态属性系统。 ...

阅读更多