首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Pou光明

    QObject

    一、 QObject概述 说到Qt,你肯定首先想到的就是信号和槽,而这就不得不提到Qobject,这次和大家分享下QObject的相关内容,并对一些内容进行代码说明,方便理解。 QObject类是Qt对象模型,Qt绝大部分类都是继承该类实现的。 该模型的核心特点是提供了一种对象之间的通讯机制——信号和槽。 你可以捕获这个信号来避免对QObject的无效引用【会有代码说明】。 QObject可以通过event()接收事件【会有代码说明】并且过滤其它对象的事件。 最后要注意的一点是,QObject在Qt中提供了基本的计时器支持。 有关定时器的高级支持,请参见QTimer 。 所有Qt的窗体都继承自QObject。 便捷函数isWidgetTye()返回对象是否是窗体部件的bool值。一些QObject函数(例如children())返回QObjectList。

    1.5K10发布于 2019-12-19
  • 来自专栏跟Qt君学编程

    翻译 | 为什么QObject子类不可复制?

    :2018年8月14日   如果您尝试复制QObject派生的类,则会导致编译器错误,例如: class MyClass : public QObject { Q_OBJECT } my_class ::QObject(const QObject&)'在此上下文中是私有的。    其他原因,但可能不那么重要,是: 一个QObject可以被认为是唯一的,方法是给它一个可以用作参考键的名称,即通过设置QObject::objectName()。 在QObject的源代码中,我们可以看到没有声明move构造函数或move赋值运算符。 如果没有宏,则使用Qt4报告以下错误信息: 错误:'QObject::QObject(const QObject&)'在此上下文中是私有的。

    1.3K10发布于 2019-11-25
  • 来自专栏跟Qt君学编程

    解决cpp添加QObject派生类的问题

    一般我们继承QObject类在头文件中添加,但是有时候需要在源文件中添加。这样就会不可避免地出现编译错误。那么我们该究竟怎么解决它呢? Object' 错误: 未定义引用'Object'的虚函数表 问题源码: /* main.cpp */ #include <QCoreApplication> class Object : public QObject 由于moc工具不识别cpp文件中继承于QObject的类,这样就不能自动为该类添加一些实现函数(元对象函数),就会导致函数未定义的错误。 当qmake运行起来时,moc工具会自动识别处理头文件中所有继承于QObject的类和一系列Qt元对象属性。 要想让moc识别cpp文件,只需要包含#include 当前文件.moc就可以了。 修正源码: /* main.cpp */ #include <QCoreApplication> class Object : public QObject { Q_OBJECT public

    2.1K10发布于 2019-07-15
  • 来自专栏跟Qt君学编程

    不继承QObject也可以使用tr函数

    一个类如果不继承QObject是不能直接使用tr函数,有什么方法可以在不继承QObject的情况下又能直接使用tr函数呢?答案是使用Q_DECLARE_TR_FUNCTIONS宏。

    1.3K20发布于 2019-10-09
  • 【Qt QObject::connect: Cannot queue arguments of type ‘your class‘】

    最近开发过程中恰好遇到了这个问题,记录一下: 在Qt框架中,如果你需要在QObject派生类的信号(signals)或槽(slots)机制中传递自定义类型的数据,或者需要将这些数据存储在QObject的属性

    13410编辑于 2026-01-23
  • 来自专栏蘑菇先生的技术笔记

    qt5中信号和槽的新语法

    , &QObject::deleteLater); } signals: void someSignal(); }; qobject.h: In member function 'void QObject ::qt_check_for_QOBJECT_macro(const T&&) const [with T = Goo]': qobject.h:535:9: instantiated from 'static :501:13: instantiated from 'void QObject::QSlotObject<Func, Args>::call(QObject*, void**) [with Func = void (Goo::*)(int), Args = QtPrivate::List<QString, void>, QObject = QObject]' main.cc:14:2: instantiated from here qobject.h:109:13: error: cannot conver 开放式问题 槽中的默认参数 如果你有类似下面的代码: class A : public QObject

    2.4K50发布于 2018-06-21
  • 来自专栏蘑菇先生的技术笔记

    qt5中信号和槽的新语法

    , &QObject::deleteLater); } signals: void someSignal(); }; qobject.h: In member function 'void QObject ::qt_check_for_QOBJECT_macro(const T&&) const [with T = Goo]': qobject.h:535:9: instantiated from 'static :501:13: instantiated from 'void QObject::QSlotObject<Func, Args>::call(QObject*, void**) [with Func = void (Goo::*)(int), Args = QtPrivate::List<QString, void>, QObject = QObject]' main.cc:14:2: instantiated from here qobject.h:109:13: error: cannot conver 开放式问题 槽中的默认参数 如果你有类似下面的代码: class A : public QObject

    2.2K70发布于 2018-05-21
  • 来自专栏嵌入式小屋的专栏

    QT学习之如何使用Qthread(moveToThread方法)

    文章目录 概述 一.QObject::moveToThread() 二.QObject::moveToThread() 的使用例子 一.QObject::moveToThread() 这个是第一种方式 ,直接调用 QObject::moveToThread() 函数,将继承自 QObject 的对象移到线程里面。 首先先写一个继承自QObject 的Worker类(为了使用信号和槽). 在worker.h 中声明 doWork 槽函数,以及完成信号 #include <QObject> class Worker : public QObject { Q_OBJECT public : explicit Worker(QObject *parent = nullptr); Worker(QString name , QObject *parent = nullptr

    6.9K20编辑于 2022-04-27
  • 来自专栏跟Qt君学编程

    Qt官方示例-枚举器

    QSerialPortInfo::availablePorts(); for (const QSerialPortInfo &info : infos) { QString s = QObject + QObject::tr("Manufacturer: ") + info.manufacturer() + "\n" + QObject::tr("Serial number: ") + info.serialNumber() + "\n" + QObject::tr("Vendor Identifier: ") + ( QString::number(info.productIdentifier(), 16) : QString()) + "\n" + QObject::tr(" QObject::tr("Yes") : QObject::tr("No")) + "\n"; auto label = new QLabel(s); layout->

    78530发布于 2020-04-01
  • 来自专栏自然语言处理

    Qt学习(二)------实例mynotepad制作

    ,SIGNAL(triggered()),this,SLOT(openFileSlot())); QObject::connect(ui->saveAction,SIGNAL(triggered ())); //Edit Menu QObject::connect(ui->undoAction,SIGNAL(triggered()),ui->textEdit,SLOT(undo( ))); QObject::connect(ui->redoAction,SIGNAL(triggered()),ui->textEdit,SLOT(redo())); QObject: ,SIGNAL(triggered()),ui->textEdit,SLOT(cut())); QObject::connect(ui->pasteAction,SIGNAL(triggered ))); QObject::connect(ui->colorAction,SIGNAL(triggered()),this,SLOT(setColorSlot())); QObject

    47910编辑于 2023-08-26
  • 来自专栏嵌入式项目开发

    7.5.1 创建条目列表示例

    QListWidget *listWidget = new QListWidget; /*添加条目*/ listWidget->addItem(new QListWidgetItem(QIcon(QObject ::tr(":/image/0.ico")), QObject::tr("条目1"))); listWidget->addItem(new QListWidgetItem(QIcon(QObject: :tr(":/image/1.ico")), QObject::tr("条目2"))); listWidget->addItem(new QListWidgetItem(QIcon(QObject:: tr(":/image/2.ico")), QObject::tr("条目3"))); /*创建布局器*/ QHBoxLayout *layout = new QHBoxLayout; layout /*创建QWidget*/ QWidget *widget = new QWidget; widget->setLayout(layout); widget->setWindowTitle(QObject

    1K10编辑于 2022-01-12
  • 来自专栏程序员

    Qt初识信号槽

    只有在Widget类中写了QObject,我们才能使用信号槽机制。因此,connect理所当然的就是QObject的函数成员。我们可以在帮助文档中看到connect函数有6个重载函数。 QObject对象,所以一般都是使用重载的5个静态成员函数。 static QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor QObject对象或者是QObject的派生类对象)。

    1.1K20发布于 2020-04-08
  • 来自专栏我的技术专栏

    QT信号槽机制

    自定义信号和槽的一个例子 首先我们要知道的是,所有继承自QObject或者它的子类(如QWidget)都可以包含信号槽。我们写的类须继承自QObject(或其子类)。 一个基于QObject的C++简单类: //MyStr.h # ifndef MYSTR # define MYSTR #include<QObject> #include<QString> class MyStr :public QObject { Q_OBJECT //必须包含的宏 public: MyStr (){m_value = "zero";} QString 为了达到通信的目的,只需要将它们连接起来,而这只需要通过 调用 QObject::connect() 函数指定一些简单信息就好。 一个信号可以连接多个槽 使用QObject::connect可以把一个信号连接到多个槽,而当信号发射时,将按声明联系时的顺序依次调用槽。

    1.2K30编辑于 2022-05-06
  • 来自专栏我有一个梦想

    QT Creator 快速入门教程 读书笔记(三)

    connect() 是 QObject 类的静态成员函数;QObject 是 Qt 中所有类的基类,它就像“树根”,从这里派生出了所有其他“树枝”。 需要注意的是,信号不是事件。 二 信号和槽的关联 信号和槽的关联使用的是QObject类的connect()函数,connect() 是 QObject 类的静态成员函数,它有多个原型: connect(QObject *sender signal, QObject *context, Functor functor); connect(QObject *sender, QMetaMethod &signal, QObject *receiver, QMetaMethod &method); connect(QObject *sender, PointerToMemberFunction 你可以将示例中的代码做如下更改: QObject::connect(&btn, &QPushButton::clicked, &app, &QApplication::quit); QObject::connect

    1.7K80发布于 2018-01-19
  • 来自专栏Pou光明

    Qt线程中使用socket作为客户端通信(二)

    Qt使用线程的方式有两种,一种是上次所说的继承QThread重新实现run()函数,在run()函数中一直循环处理;另一种则是继承QObject并使用moveToThread()函数将对象移到子线程中。 由于继承QThread方式使用的并不规范,Qt官方强烈建议使用继承QObject的方式。 由上次程序得出的结果,使用继承QThread的方式并不可行,所以这次使用继承QObject的形式。经测试得出,继承QObject该方式不会造成UI的卡顿。 下面直接贴段代码压压惊: 客户端.h部分: #ifndef MYCLIENT_H #define MYCLIENT_H #include <QObject> #include <QThread> class QTcpSocket; class MyClient : public QObject { Q_OBJECT public: explicit MyClient(QObject *parent

    3.4K40发布于 2019-07-29
  • 来自专栏jiajia_deng

    Qt 信号和槽机制详解

    信号和槽的大致实现图如下: 【信号和槽使用规则和注意事项】 定义信号和槽: 信号和槽机制,是Qt的拓展,使程序员可以决定信号函数的调用目标 信号和槽只有Qt对象才能拥有(QObject类或QObject > // 信号和槽只有Qt对象才能拥有(QObject类或QObject的子类才能定义信号和槽函数) class CSignal : public QObject { // 定义了信号和槽的Qt *parent) : QObject(parent) { } #ifndef CSLOT_H #define CSLOT_H #include <QObject> #include <QDebug > // 信号和槽只有Qt对象才能拥有(QObject类或QObject的子类才能定义信号和槽函数) class CSlot : public QObject { // 定义了信号和槽的Qt类 *parent) : QObject(parent) { } // 槽函数实现 void CSlot::slotTest() { qDebug() << "slotTest running

    1.4K10编辑于 2023-10-20
  • 来自专栏跟Qt君学编程

    Qt多语言翻译示例

    ::tr翻译原因是该翻译的上下文为QObject对应ts文件的是 <name>QObject</name>的值; 翻译上下文使用不正确,明明是加载成功的语言文件就是翻译不成功,很多是因为这个上下文导致; 可使用 QCoreApplication::translate接口指定上下文,如用 QCoreApplication::translate("QObject","start")指定"QObject"上下文标识 ; } qApp->installTranslator(&translator); qDebug()<<QObject::tr("start")<<QObject::tr("end "); qDebug()<<QObject::tr("open")<<QObject::tr("close"); qApp->removeTranslator(&translator) tr("start")<<QObject::tr("end"); qDebug()<<QObject::tr("open")<<QObject::tr("close"); return

    2.4K31发布于 2019-07-15
  • 来自专栏半生瓜のblog

    【QML】QML与C++混合编程

    return app.exec(); } QML调用C++函数 #ifndef APPLICATIONDATA_H #define APPLICATIONDATA_H #include <QObject (QObject *parent = nullptr); //QML中调用C++函数,这个函数需以Q_INVOKABLE进行标记——注册一个方法到QML //或者该函数是Qt的槽函数 argc,argv); QQmlApplicationEngine engine; QQmlComponent component(&engine,"item.qml"); QObject * item = view.rootObject(); MyClass myClass; QObject::connect(item, SIGNAL > #include <QDebug> class MyClass : public QObject { Q_OBJECT public: explicit MyClass(QObject

    1.5K30编辑于 2023-05-13
  • 来自专栏跟Qt君学编程

    看Qt源码理解半自动内存管理

    ❝继承于QObject并设置setParent即可获得半自动内存管理的能力。 0x03 源码体现 (1) 继承关系源码体现 QObject构造函数(省略无关细节): QObject::QObject(QObject *parent) : d_ptr(new QObjectPrivate setParent(parent); /* 设置父对象 */ ... } setParent成员函数: void QObject::setParent(QObject *parent) { Q_D(QObject); Q_ASSERT(! QObject::~QObject() { ... if (!d->children.isEmpty()) d->deleteChildren(); ...

    1.5K20发布于 2020-05-25
  • 来自专栏Java架构师必看

    QT信号槽机制[Qt槽判断信号来源]

    自定义信号和槽的一个例子 首先我们要知道的是,所有继承自QObject或者它的子类(如QWidget)都可以包含信号槽。我们写的类须继承自QObject(或其子类)。 一个基于QObject的C++简单类: //MyStr.h # ifndef MYSTR # define MYSTR #include<QObject> #include<QString> class MyStr :public QObject { Q_OBJECT //必须包含的宏 public: MyStr (){m_value = "zero";} QString 为了达到通信的目的,只需要将它们连接起来,而这只需要通过 调用 QObject::connect() 函数指定一些简单信息就好。 一个信号可以连接多个槽 使用QObject::connect可以把一个信号连接到多个槽,而当信号发射时,将按声明联系时的顺序依次调用槽。

    2.2K20编辑于 2022-03-09
领券