首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Linux知识积累

    使用元对象编译器

    如果它发现其中的一个或多个类的声明中含有Q_OBJECT宏,它就会给这个使用Q_OBJECT宏的类生成另外一个包含元对象代码的C++源文件。 方法二用在你想让实现文件自包含,或者Q_OBJECT类是内部实现的并且在头文件中不可见的这些情况下使用。 诊断 元对象编译器将会警告关于学多在Q_OBJECT类声明中危险的或者不合法的构造。 这里是一个例子: class SomeTemplate<int> : public QFrame { Q_OBJECT ... 这里是一个不合法的语法的例子: class SomeClass : public QObject { Q_OBJECT ...

    1.3K40发布于 2019-10-03
  • 来自专栏程序员

    Qt中常见的错误

    即使你加上了Q_OBJECT宏。你在编译的时候仍会遇到error: undefined reference to `vtable for xxxx'。这个时候你就需要手动qmake一下。 把宏Q_OBJECT写在了CPP文件中 Qt的moc会自动处理包含Q_OBJECT的头文件,并且只处理头文件。因此你把Q_OBJECT写在了CPP文件之中。

    1.1K20发布于 2020-04-14
  • 来自专栏跟Qt君学编程

    简化QThread示例代码

    该方法用在大部分场景下都可以适用,但使用起来略有繁琐,需要创建一个线程执行类Worker和控制类Controller,如下代码: class Worker : public QObject { Q_OBJECT void resultReady(const QString &result); }; class Controller : public QObject { Q_OBJECT class Controller : public QObject { Q_OBJECT QThread workerThread; public: Controller() {

    83420编辑于 2023-03-17
  • 来自专栏点云PCL

    简析CloudCompare文件夹之间的关系

    CC文件夹之间的依赖关系 CC类继承QT为什么加上Q_OBJECTQ_OBJECT是Qt中的一个宏定义,这是因为Qt的语法是在c++的基础上拓展的,所以在Qt程序的编译过程中,直接用gcc这些标准编译器进行编译是不可行的,因为gcc不能识别这些拓展性的语法,比如信号和槽 moc(Meta-Object Compiler),即元对象编译器,Qt 程序在交由标准编译器编译之前,会使用 moc 分析 C++ 源文件,假设它发现某个头文件中包括了 Q_OBJECT这个宏,需要注意的是 , moc 只处理头文件中标记了Q_OBJECT的类声明,不会处理 cpp 文件中的类似声明,则会生成另外一个 C++ 源文件,这个源文件里包括了 Q_OBJECT 宏的实现代码,并且文件名称将会是原文件名称前面加上 所以我们可以注意到CloudCompare中大多头文件中定义类的时候都加上了Q_OBJECT。 CC模块划分

    1.6K20编辑于 2022-12-27
  • 来自专栏24K纯开源

    C++模板类与Qt信号槽混用

    typename DataType> class ProgressFilter : public ins::MediaFilter<DataType,DataType>, public QObject{ Q_OBJECT 错误提示已经很显然了,Q_OBJECT宏不支持C++模板类。Qt中一个类如果需要支持信号槽机制,那么必须要加一个Q_OBJECT做预处理。 所以我们实现一个中间类: class Proxy : public QObject { Q_OBJECT public: explicit Proxy(QObject *parent = 0) :

    2.8K60发布于 2018-04-04
  • C/C++ Qt 信号自定义槽函数

    #ifndef TEACHER_H #define TEACHER_H #include <QObject> class Teacher : public QObject { Q_OBJECT student.h #ifndef STUDENT_H #define STUDENT_H #include <QObject> class Student : public QObject { Q_OBJECT #include <QWidget> #include "student.h" #include "teacher.h" class Widget : public QWidget { Q_OBJECT student.h #ifndef STUDENT_H #define STUDENT_H #include <QObject> class Student : public QObject { Q_OBJECT include <QPushButton> #include "student.h" #include "teacher.h" class Widget : public QWidget { Q_OBJECT

    52610编辑于 2022-12-28
  • C++ QT 中信号和槽的原理是什么?

    工作原理定义信号和槽:在类中使用 Q_OBJECT 宏,以便启用元对象系统。使用 signals 关键字定义信号。使用 slots 关键字定义槽。 代码解释Sender 类:继承自 QObject,并使用 Q_OBJECT 宏。定义了一个信号 valueChanged,参数为 int 类型。 Receiver 类:继承自 QObject,并使用 Q_OBJECT 宏。定义了一个槽 handleValueChanged,参数为 int 类型。 定义:在类中使用 Q_OBJECT 宏,并使用 signals 和 slots 关键字定义信号和槽。连接:使用 QObject::connect 函数将信号和槽连接起来。

    1.6K00编辑于 2025-01-27
  • 来自专栏跟Qt君学编程

    轻量级Qt键盘-介绍篇

    键盘界面 项目预览 文件目录 目录结构 基类键盘AbstractKeyboard class AbstractKeyboard : public QWidget { Q_OBJECT public keyPressed(int key, QString value); }; 实现类键盘Keyboard class Keyboard : public AbstractKeyboard { Q_OBJECT switchSpecialChar(); void switchEnOrCh(); }; 键盘按钮KeyButton class KeyButton : public QPushButton { Q_OBJECT

    1.6K40发布于 2019-07-23
  • 来自专栏程序员

    Qt自定义信号槽

    Teacher.h #ifndef TEACHER_H #define TEACHER_H #include <QObject> class Teacher : public QObject { Q_OBJECT STUDENT_H #define STUDENT_H #include <QObject> #include <QDebug> class Student : public QObject { Q_OBJECT 并且在类中的第一行就写上了Q_OBJECT宏。这个宏为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。这个宏非常重要,很多操作都需要依赖这个宏。 其实Q_OBJECT也是被moc处理的,moc会处理含有Q_OBJECT的头文件。其实我们可以看到这个moc处理之后的文件。具体是这样的。

    1.3K10发布于 2020-04-08
  • 来自专栏跟Qt君学编程

    Qt线程使用的两种方法

    示例: class Worker : public QObject { Q_OBJECT public slots: void doWork(const QString ¶meter signals: void resultReady(const QString &result); }; class Controller : public QObject { Q_OBJECT 示例: class WorkerThread : public QThread { Q_OBJECT void run() override { QString result

    3K10发布于 2019-07-15
  • 来自专栏jiajia_deng

    Qt 信号和槽机制详解

    定义信号和槽: 信号和槽机制,是Qt的拓展,使程序员可以决定信号函数的调用目标 信号和槽只有Qt对象才能拥有(QObject类或QObject的子类才能定义信号和槽函数) 定义了信号和槽的Qt类,必须以 Q_OBJECT 可以将数据先封装为结构体,然后调用 qRegisterMetaType<类型>(); 来注册结构体类型就可以通过信号和槽函数的参数传递了 总结: 信号和槽都在 QObecjt 类或子类下 三个处理宏 Q_OBJECT 宏开始,其内部是初始化信号和槽的环境 Q_OBJECT public: explicit CSignal(QObject *parent = 0); signals: void 信号和槽只有Qt对象才能拥有(QObject类或QObject的子类才能定义信号和槽函数) class CSlot : public QObject { // 定义了信号和槽的Qt类,必须以 Q_OBJECT 宏开始,其内部是初始化信号和槽的环境 Q_OBJECT public: explicit CSlot(QObject *parent = 0); signals: public slots

    1.6K10编辑于 2023-10-20
  • 来自专栏编程学习基地

    Qt多线程编程

    程序运行后开启线程,打印100~0 Program右键添加新文件,继承QThread 添加头文件 #include <QObject> #include <QThread> 添加宏 不添加Q_OBJECT 宏无法使用信号与槽机制 Q_OBJECT 重写run函数 protected: virtual void run(); mythread.h文件: #ifndef MYTHREAD_H #define MYTHREAD_H #include <QObject> #include <QThread> class MyThread : public QThread { Q_OBJECT public MyThread.h #ifndef MYTHREAD_H #define MYTHREAD_H #include <QObject> class MyThread : public QObject { Q_OBJECT include "mythread.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT

    2.8K20发布于 2020-09-01
  • 来自专栏技术杂记

    QT(二).计算器(4)

    This button in the title bar of the dialog, pass Qt::WindowTitleHintQt::WindowSystemMenuHint in f ---- Q_OBJECT 宏 Qt/qobjectdefs.h 中有关于 Q_OBJECT 宏的定义 /* tmake ignore Q_OBJECT */ #define Q_OBJECT \ public: \ Q_OBJECT_CHECK Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); 只有加入了Q_OBJECT ,才能使用QT中的signal和slot机制 The Q_OBJECT macro at the beginning of the class definition is necessary for all 掌握它们的属性和方法很有必要 QApplication QFont QTextCodec QWidget QDialog QString QLabel 以下函数和宏非常重要 connect SIGNAL SLOT Q_OBJECT

    81740发布于 2021-09-14
  • 来自专栏技术之路

    QTableView 添加进度条

    PROGRESSBARDELEGATE_H #include <QItemDelegate> class ProgressBarDelegate : public QItemDelegate { Q_OBJECT define TABLEMODEL_H #include <QAbstractTableModel> class TableModel : public QAbstractTableModel { Q_OBJECT QTableView> class TableModel; class ProgressBarDelegate; class TableView : public QTableView { Q_OBJECT MAINWINDOW_H #include <QMainWindow> class TableView; class QTimer; class MainWindow : public QWidget { Q_OBJECT

    2.6K50发布于 2018-01-31
  • 来自专栏Pou光明

    Qt undefined reference to `vtable for * * * '

    代码如下: class SendMsg : public QObject { Q_OBJECT }; int main(int argc, char *argv[]) { QCoreApplication 如果找到一个或多个包含Q_OBJECT宏的类声明,它将生成一个C ++源文件,其中包含这些类的元对象代码。 除此之外,信号和槽机制,运行时类型信息和动态属性系统也需要元对象代码。 现在程序变成这样: class SendMsg : public QObject { Q_OBJECT }; #include "main.moc" int main(int argc,

    3.7K20发布于 2020-04-23
  • 来自专栏程序员

    创建第一个Qt程序

    #include <QWidget> //包含QWidget模块 class Widget : public QWidget //Widget派生自QWidget { Q_OBJECT //Q_OBJECT表示允许使用信号槽机制。

    93420发布于 2020-04-08
  • 来自专栏我命由我不由天

    关于在vs2010中编译Qt项目时出现“无法解析的外部命令”的错误

    关于moc文件,查看:qt中moc的作用 简单来说:moc是QT的预编译器,用来处理代码中的slot,signal,emit,Q_OBJECT等。 moc文件是对应的处理代码,也就是Q_OBJECT宏的实现部分。 XX.ui文件生成ui_XX.h: 当前路径命令行输入uic XX.ui -o ui_XX.h

    11.5K20发布于 2019-09-11
  • 来自专栏跟Qt君学编程

    Qt技巧-枚举与字符串互相转换

    1 使用方法 项目文件添加 QT+=core; 创建类 Car继承于 QObject并使用 Q_OBJECT宏; 类内添加枚举 Color; 使用 Q_ENUM宏将 Color枚举注册到元对象系统中; 5 示例 示例 Car.h #include <QObject> class Car : public QObject { Q_OBJECT public: Car(QObject

    3K20发布于 2019-07-15
  • 来自专栏设计模式

    《编程千问》第四问:QT中信号和槽机制的原理是什么?

    信号声明 信号在Qt中通常在类的signals部分声明,例如: class MyWidget : public QWidget { Q_OBJECT public: MyWidget( 例如: class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = nullptr) : 温度传感器类(主题) class TemperatureSensor : public QObject { Q_OBJECT public: void setTemperature(int 温度显示器类(观察者) class TemperatureDisplay : public QObject { Q_OBJECT public slots: void updateTemperature

    82900编辑于 2024-12-20
  • 来自专栏跟Qt君学编程

    Qt多种定时器

    示例: class Object : public QObject { Q_OBJECT public: Object() { startTimer(1000); 示例: class Object : public QObject { Q_OBJECT public: Object() { } protected: void timerEvent 示例: class Object : public QObject { Q_OBJECT public: Object() { connect(&m_timer,

    2.7K20发布于 2019-07-15
领券