- 浏览: 769277 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
元对象系统:创建了独立的软件组织,这些组件可以绑定在一起,但任何一个组件对于它所要连接的组件的情况事先都一无所知。
1.信号-槽
槽:和普通成员函数一样,可以是虚函数,可以被重载,可以是public,private,protected,并且可以被其它成员函数调用。唯一不同的是槽可以和信号连接,每当emit一个信号就会自动调用这个槽函数
emit:Qt中的关键字,像其它Qt扩展一样,它也会被c++预处理器转换成标准的c++代码
一般情况下信号和槽的必须有相同的顺序和相同的类型。
内省:对于实现信号和槽是必须的,并且允许应用程序的开发人员在运行时获得有关QObject子类的元信息,包括一个含有对象的类名以及它所支持的信号和槽的列表。
Qt通过提供一个独立的moc工具来解析O_OBJECT类的定义,由于moc使用纯C++来实现它的所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。
1.Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject(),tr(),qt_metacall()...
2.moc工具生成了用于Q_OBJECT声明的所有函数和所有信号的实现
3.像connect()和disconnect()这样的OBject的成员函数使用这些内省函数来完成它们的工作。
findDialog.h
findDialog.cpp
1.信号-槽
槽:和普通成员函数一样,可以是虚函数,可以被重载,可以是public,private,protected,并且可以被其它成员函数调用。唯一不同的是槽可以和信号连接,每当emit一个信号就会自动调用这个槽函数
emit:Qt中的关键字,像其它Qt扩展一样,它也会被c++预处理器转换成标准的c++代码
一般情况下信号和槽的必须有相同的顺序和相同的类型。
内省:对于实现信号和槽是必须的,并且允许应用程序的开发人员在运行时获得有关QObject子类的元信息,包括一个含有对象的类名以及它所支持的信号和槽的列表。
Qt通过提供一个独立的moc工具来解析O_OBJECT类的定义,由于moc使用纯C++来实现它的所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。
1.Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject(),tr(),qt_metacall()...
2.moc工具生成了用于Q_OBJECT声明的所有函数和所有信号的实现
3.像connect()和disconnect()这样的OBject的成员函数使用这些内省函数来完成它们的工作。
findDialog.h
#ifndef FINDDIALOG_H #define FINDDIALOG_H #include<QDialog> class QLabel; class QHBoxLayout; class QLineEdit; class QVBoxLayout; class QRadioButton; class QCheckBox; class QPushButton; class FindDialog:public QDialog{ Q_OBJECT public: explicit FindDialog(QWidget *parent=0); private: QLabel* label1; QLineEdit* lineEdit; QHBoxLayout* layout; QHBoxLayout* layout1; QVBoxLayout* layout2; QVBoxLayout* layout3; QVBoxLayout* layout4; QRadioButton* radioButton; QCheckBox* checkBox; QPushButton* findButton; QPushButton* closeButton; protected slots: void clearText(QString s); void findSlots(const QString& s); void responseClick(); signals: void findSignals(const QString& s); }; #endif // FINDDIALOG_H
findDialog.cpp
#include"FindDialog.h" #include<QApplication> #include<QHBoxLayout> #include<QVBoxLayout> #include<QLabel> #include<QLineEdit> #include<QRadioButton> #include<QCheckBox> #include<QPushButton> #include<QMessageBox> static const QString lineStr = "write..."; FindDialog::FindDialog(QWidget *parent) :QDialog(parent) { label1 = new QLabel("Find What:"); layout = new QHBoxLayout; layout1 = new QHBoxLayout; layout2 = new QVBoxLayout; layout3 = new QVBoxLayout; layout4 = new QVBoxLayout; lineEdit = new QLineEdit; lineEdit->setText(lineStr); radioButton = new QRadioButton("Match case"); radioButton->setChecked(true); checkBox = new QCheckBox("Search backward"); checkBox->setChecked(true); findButton = new QPushButton("Find"); closeButton = new QPushButton("Close"); layout1->addWidget(label1); layout1->addWidget(lineEdit); layout2->addWidget(radioButton); layout2->addWidget(checkBox); layout3->addLayout(layout1); layout3->addLayout(layout2); layout4->addWidget(findButton); layout4->addWidget(closeButton); layout->addLayout(layout3); layout->addLayout(layout4); setLayout(layout); setWindowTitle("Find"); sizeHint(); connect(closeButton,SIGNAL(clicked()),this,SLOT(close())); connect(lineEdit,SIGNAL(textEdited(QString)),this,SLOT(clearText(QString))); connect(findButton,SIGNAL(clicked()),this,SLOT(responseClick())); connect(this,SIGNAL(findSignals(const QString&)),this,SLOT(findSlots(const QString&))); } //当第一次编辑lineEdit时把原来的write...去掉,并解除这对信号-槽 void FindDialog::clearText(QString s) { s.remove(lineStr); lineEdit->clear(); disconnect(lineEdit,SIGNAL(textEdited(QString)),this,SLOT(clearText(QString))); lineEdit->setText(s); } //响应点击,发出不同的信号 void FindDialog::responseClick() { if(radioButton->isChecked()||checkBox->isChecked()){ emit findSignals("checked"); }else{ emit findSignals("not checked"); } } void FindDialog::findSlots(const QString &s) { QMessageBox* msg = new QMessageBox(QMessageBox::Information, "Message", s); msg->exec(); } int main(int argc,char* argv[]) { QApplication app(argc,argv); FindDialog* dialog = new FindDialog; dialog->show(); app.exec(); }
发表评论
-
mac无法debug
2019-09-23 17:36 257升级新的lldb,底层脚本用的py3,而qtcreator暂不 ... -
现有项目生成pro文件
2018-07-21 15:32 1283qmake -project -
QtCreator使用arm编译器
2014-04-18 16:19 1227构建工具链各种不和谐,心一狠,直接改最原始的配置文件 1.首 ... -
qtcreator c++11
2013-07-15 22:10 1387在.pro里面:QMAKE_CXXFLAGS += -std= ... -
qt webkit
2013-03-28 17:27 818arora是一个很不错的开源的浏览器,我说它不错并不见得它的性 ... -
qt profile
2012-05-29 17:04 5387这篇文章是我从360doc上转的,本来是要把转的url列出来的 ... -
QtConcurrent
2012-05-26 14:48 2024当我们想在一个或多个辅助线程执行的同时做一些后台处理且无须使用 ... -
QThreadPool
2012-05-23 22:24 2205#include<QThreadPool> ... -
用qtcreator但不用qt库
2012-04-17 10:48 1318pro file: QT -= core gui -
qtcreator缺少编码
2012-04-14 13:46 877将plugins/codecs复制到yourcreator/b ... -
QTableView显示tooltip与设置日志
2012-01-11 22:15 3674原文http://www.cppblog.com/biao/a ... -
Qt mysql相关
2011-11-28 23:44 1793sudo apt-get install mysql-serv ... -
Qt自定义事件
2011-08-31 14:48 5319先看下官方的文档:(google translation) Q ... -
QComboBox下拉item变灰
2011-07-21 10:10 1947qobject_cast<QStandardItemMo ... -
Qt国际化
2011-07-21 09:37 9741.先在.pro中加入一行:TRANSLATIONS = xx ... -
Qt读写xml
2011-07-20 10:49 6465test.xml <?xml version=&qu ... -
Qt多线程
2011-07-18 21:08 1455Qt中线程安全的类有QMutex,QMutexLocker,Q ... -
生产者与消费者
2011-07-16 09:42 2#include<iostream> #in ... -
Qt读写二进制文件
2011-07-11 22:11 5681DataStream.h #ifndef DATASTRE ... -
QItemDelegate
2011-07-09 10:57 1894.h #ifndef DIALOG_H #define ...
相关推荐
这就引出了 Qt 的元对象系统。元对象系统是 Qt 为了解决 C++ 静态类型的限制而设计的一种机制,它允许在运行时动态地添加和修改对象的属性,以及实现对象之间的通信。 1. **元对象系统**: - Qt 的元对象系统基于 ...
QT,C++使用技巧,实战应用开发小系统参考资料,源码参考。 详细介绍了一些Qt框架的各种功能和模块,以及如何使用Qt进行GUI开发、网络编程和跨平台应用开发等。 适用于初学者和有经验的开发者,能够帮助你快速上手Qt...
总结起来,Qt元对象系统和属性系统是Qt框架的关键特性,它们极大地增强了C++的面向对象编程能力,使得跨平台应用开发更加便捷高效。元对象系统提供的信号与槽机制解决了对象间的通信问题,而属性系统则允许动态地...
测试用例samp3-1演示Qt元对象系统的一些功能。
在Qt框架中,元对象系统(Meta-Object System)是一个强大的特性,它使得C++类可以与Qt的信号和槽机制、属性系统以及动态对象功能紧密集成。在Qt3.1.3版本中,元对象特性是核心组件之一,允许程序员以更灵活的方式...
元对象系统是Qt库中的一个重要特性,它为C++引入了许多面向对象编程中的高级功能,如信号与槽机制、运行时类型信息以及动态属性系统。在“qt-C++开发例子3”中,我们将深入探讨元对象系统在实际应用中的体现。 首先...
### Qt中的元对象系统(Meta-Object System) 在探讨Qt框架的核心特性时,我们不可避免地会接触到其元对象系统(Meta-Object System)。这一系统是Qt框架中极为关键的组成部分,它不仅支持了Qt的信号与槽机制,还提供...
元对象系统是Qt框架的核心部分,它使得C++对象能够支持动态属性、信号与槽机制,以及其他元数据相关的功能。本文将深入分析Qt的元对象系统,并探讨其关键组件。 首先,`QObject`类是元对象系统的基础,它是所有利用...
标题中的"QtQ_OBJECT"提到了一个关键概念,这与Qt库中的元对象系统(Meta-Object System)紧密相关。下面将详细介绍这个知识点及其相关背景。 Qt的元对象系统是其框架的一个核心特性,它允许开发者在运行时动态地...
Qt的元对象系统是其反射能力的基础,它由 moc(Meta-Object Compiler)工具生成的元对象代码提供支持。moc会扫描Qt类的头文件,为每个类生成元对象代码,包含了类的元信息。这些信息存储在QMetaObject类的实例中,...
这些资源可以帮助深入理解Qt对象树的使用和实现细节,包括但不限于如何创建和管理对象树、如何利用对象树进行事件分发、如何利用信号与槽机制在对象间通信、以及如何利用`QObject`的动态属性系统等。 总的来说,...
首先,我们需要了解Qt的元对象系统(Meta-Object System)。这个系统是Qt框架的一个核心特性,它为C++语言提供了运行时类型信息、信号与槽机制以及动态属性系统。元对象系统的关键组件是`QMetaObject`类,它存储了...
元对象系统使得QT对象之间可以进行交互和通信,从而实现复杂的应用程序。 6. QT Creator设计软件概述 QT Creator是QT框架提供的一个集成开发环境(IDE),提供了一个完整的开发环境,包括项目管理、代码编写、调试...
1. **QT库**:QT库是QT的核心,其中的Q_OBJECT宏是QT元对象系统的基础,它使得C++对象可以支持信号与槽机制,这是QT的一大特色,允许对象间的异步通信。此外,还有QWidget类,它是所有GUI部件的基础,包括QLabel、...
综上所述,QT自助点餐系统结合了QT库的强大功能和面向对象编程的优势,构建了一个全面的餐饮服务应用。其设计和实现涵盖了图形界面设计、数据管理、网络通信、安全性等多个方面,是学习和实践QT开发的优秀实例。通过...
由于QML引擎与Qt元对象系统的集成,可以从QML中访问任何从QObject继承的类的属性、方法和信号,C++代码既可以在应用中集成,也可以在插件中集成。 QML访问C++数据主要有三种方法: 1、将C++ 类的属性暴露给QML; 2、...
4. **Q_OBJECT宏**:这是Qt元对象系统的关键,允许对象定义信号、槽和属性,支持动态方法调用和反射。 5. **丰富的控件库**:Qt提供大量预定义的GUI组件,如按钮、表格、对话框等,可以快速构建复杂的用户界面。 6. ...
这种技术基于Qt的元对象系统(Meta-Object System),它使得类型安全的远程方法调用成为可能。 在本示例中,我们有至少两个进程:一个是服务器进程,提供文件写入功能;另一个是客户端进程,负责调用服务器上的方法...
较深入地分析了Qt对象模型的一些基本知识,涉及信号和槽机制、Qt元对象系统、属性系统和对象树机制,以及部件类型和部件的几何布局等内容。 35 \ 第4章 程序主窗口—— QMainWindow 卢传富 Qt应用程序的主窗口是由多...
总的来说,`Q_DECLARE_METATYPE`和`qRegisterMetaType`使得自定义类型能够在Qt的元对象系统中被识别,这样它们就能无缝地与`QVariant`、信号和槽以及其他依赖于元对象系统功能的组件一起工作,极大地提高了代码的...