继承QTreeWidgetItem发生error: 'staticMetaObject' is not a member of 'QTreeWidgetItem' 错误

【feature_column处理】- indicator_column(指示列)和embedding_column(嵌入列) 1. 开胃菜 我们先来了解一下tf.feature_column.input_layer def input_layer(features, feature_columns, weight_collections=None, trainable=True, cols_to_vars=None, cols_to_output_tensors=None) 阅读详情

点击打开链接

#ifndef QQUSERITEM_H就发生下列错误

#define QQUSERITEM_H
#include <QTreeWidgetItem>
class QQUserItem :public QTreeWidgetItem
{
Q_OBJECT
public:
explicit QQUserItem(QQUserItem *parent = 0);
signals:
public slots:
};
#endif // QQUSERITEM_H

debug\moc_QQUserItem.cpp:41:8: error: 'staticMetaObject' is not a member of 'QTreeWidgetItem'

 

..\..\Qt\4.6.3\include/QtCore/../../src/corelib/kernel/qobject.h: In member function 'virtual const QMetaObject* QQUserItem::metaObject() const':

 

..\..\Qt\4.6.3\include/QtCore/../../src/corelib/kernel/qobject.h:296:33: error: 'QScopedPointer<QObjectData> QObject::d_ptr' is protected

 

debug\moc_QQUserItem.cpp:51:21: error: within this context

 

..\..\Qt\4.6.3\include/QtCore/../../src/corelib/kernel/qobject.h:296:33: error: object missing in reference to 'QObject::d_ptr'

 

debug\moc_QQUserItem.cpp:51:21: error: from this location

 

..\..\Qt\4.6.3\include/QtCore/../../src/corelib/kernel/qobject.h:296:33: error: 'QScopedPointer<QObjectData> QObject::d_ptr' is protected

 

debug\moc_QQUserItem.cpp:51:50: error: within this context

 

..\..\Qt\4.6.3\include/QtCore/../../src/corelib/kernel/qobject.h:296:33: error: object missing in reference to 'QObject::d_ptr'

 

debug\moc_QQUserItem.cpp:51:50: error: from this location

 

debug\moc_QQUserItem.cpp: In member function 'virtual void* QQUserItem::qt_metacast(const char*)':

 

debug\moc_QQUserItem.cpp:59:12: error: 'qt_metacast' is not a member of 'QTreeWidgetItem'

 

debug\moc_QQUserItem.cpp: In member function 'virtual int QQUserItem::qt_metacall(QMetaObject::Call, int, void**)':

 

debug\moc_QQUserItem.cpp:64:11: error: 'qt_metacall' is not a member of 'QTreeWidgetItem'

 

debug\moc_QQUserItem.cpp: In member function 'virtual void* QQUserItem::qt_metacast(const char*)':

 

debug\moc_QQUserItem.cpp:60:1: warning: control reaches end of non-void function

 

debug\moc_QQUserItem.cpp: In member function 'virtual const QMetaObject* QQUserItem::metaObject() const':

 

debug\moc_QQUserItem.cpp:52:1: warning: control reaches end of non-void function

 

mingw32-make[1]: *** [debug/moc_QQUserItem.o] Error 1

 

mingw32-make: *** [debug] Error 2

 

The process "D:/MinGW/bin/mingw32-make.exe" exited with code %2.

Error while building project MyQQ (target: Desktop)

When executing build step 'Make'

修改成这样 class QQUserItem :public QObject,public QTreeWidgetItem就没错误了,搜到了如下资料:

居然有这样的错误:'staticMetaObject' is not a member of 'Ui::MainWindow'

 

最早接触到这类设计其实是从Borland C++ Builder 开始的,作为一个所谓的快速开发工具,其实我对其实现界面设计那块到现在都没有清晰的理解。后来接触了Java 一段时间,那时候只懂得自己设计界面就是继承一个类,如主窗口或者 applet,然后在该类中添加很多其他的 component 作为其 protected 成员。可是很少考虑到怎么更方便的设计。因此,可以说接触到第一个这种设计思想的GUI 库就是在 Qt 了。 不得不说 Qt 其实和 Java 很像,虽然说 Qt 是 C++ 写成,但是注意到它其实是单一祖先 QObject 一脉相承,通过 QMetaObject 实现的RTTI,这多多少少和Java单一祖先一致,但是 Qt 不排斥使用其他的 C++ class,只是失去了 signal/slot 机制。在 moc 的 man page 里面,其实介绍了 Qt 实现的种种局限性:

我们无法使用 template 继承 QObject,换言之,下面代码无法被 moc 转换成为有效的 C++ compiler 可编译代码:
     template<class>  

     class TemplateClass : public QObject {  
           Q_OBJECT  
           // ...
     public slots:  
          // ...
     } ;class>
使用 multiple inheritance 必须把 QObject 或者其子类放在第一个父类的位置(因为使用 Q_OBJECT 需要覆盖),然后继承别的类。颠倒后,如 g++ 会抱错,如
     multiclass.hpp:17: Warning: Class MultiClass inherits from two QObject subclasses NoneQtClass and QObject. This is not supported!
     moc_multiclass.cpp:39: error: ‘staticMetaObject’ is not a member of ‘NoneQtClass’
     moc_multiclass.cpp: In member function ‘virtual void* MultiClass::qt_metacast(const char*)’:
     moc_multiclass.cpp:55: error: ‘qt_metacast’ is not a member of ‘NoneQtClass’
     moc_multiclass.cpp: In member function ‘virtual int MultiClass::qt_metacall(QMetaObject::Call, int, void**)’:
     moc_multiclass.cpp:60: error: ‘qt_metacall’ is not a member of ‘NoneQtClass’
     make: *** [moc_multiclass.o] Error 1         MultiClass 继承 QObject 和 NoneQtClass,插入的 Q_OBJECT 展开后,因为将 NoneQtClass 放在第一位后 MultiClass 的结构已经不是 QObject 在前面所以创建staticMetaObject 出错,后面虚函数表也因为在后面所以导致使用的其实是前面那个 class 的 vtable。

函数指针不能作为 signal/slot 的参数,这个可以用 typedef 克服,如
class SomeClass : public QObject
{  
         Q_OBJECT  
          //...
public slots:  
        // illegal
         void apply( void (*apply)(List *, void *), void * );  
}; 将被认为非法(主要是判断参数类型时会失败,记得 QMetaObject 存下来的是什么信息么?),但是

typedef void (*ApplyFunctionType)( List *, void * );  

class SomeClass : public QObject
{  
         Q_OBJECT  
         //...
public slots:  
         void apply( ApplyFunctionType, char * );  
}; 是可行的。

友 元声明最好不要放在 signal 和 slot 声明中,这很明显,因为多数情况下虽然根据宏替换, signals: 被替换为 protected:,slots 被替换为空,但是编译器处理 friend 可能并不完全这样无关的处理,理论上说标准的编译器应该能 work,如 g++ 4.3.3.
signal 和 slot 不能被 upgrade,这是因为 moc 需要一个完整的函数声明,而提升的时候声明是不完整的,如
class SlotClass : public QObject
{  
         Q_OBJECT  
protected slots:  
         int getValue() ;  
} ;  

class UpgradeSlotClass : public SlotClass
{  
         Q_OBJECT  
public slots:  
         Slot::getValue ;  
} ;  其中的 Slot::getValue 的提升在正常的情况是被允许的,可见报错的是 moc,

/usr/bin/moc-qt4 -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. upgradeslotclass.hpp -o moc_upgradeslotclass.cpp
upgradeslotclass.hpp:15: Error: Not a signal or slot declarationsignal 和 slot 的参数不能使用宏,这是因为 moc 不展开宏。
嵌套类声明不应该出现在 signal 或者 slot 里面,也是因为 moc 不能处理的原因。
构造函数不应出现在 signal 和 slot 里面,虽然是函数,但是没有必要。
Q_PROPERTY 宏声明属性时应在包含其读写函数的 public 节之前,写在同一个 public 里面不允许,注意
#define Q_PROPERTY(text)其实在类声明时这句话没有任何作用,只是 moc 编译会产生对应的代码,而 moc 要求这部分必须以类似下面的方式书写

class PropertyClass : public QObject
{  
         Q_OBJECT  
         Q_PROPERTY( int value READ getValue WRITE setValue )  
         int value ;  
public:  
          PropertyClass() ;  
          void setValue( int = 0 ) ;  
          int getValue() const ;  
} ;  这部分对应 moc 会产生如下代码

      int PropertyClass::qt_metacall(QMetaObject::Call _c, int _id, void **_a)  
      {  
          _id = QObject::qt_metacall(_c, _id, _a);  
          if (_id < _c ="=" _v =" _a[0];" _c ="=" _v =" _a[0];" _c ="=" _c ="=" _c ="=" _c ="=" _c ="=" _c ="=">  
          为什么在 QMetaObject 中提供支持 property 以及 Q_CLASSINFO 这些看起来完全没必要的东西呢?后者比如

      Q_CLASSINFO("Version", "3.0.0")  
这 些其实从一个方面是对 GUI 设计程序提供支援。Qt 提供的 GUI 设计程序叫 Qt Designer(似乎 Qt Creator 也能 design),这是一个图形界面,将需要的 widget 拖到窗口上,用适当的 layout 组织起来,在每一个 widget 被点中的时候有一个 property editor,可以在这里设置前面使用 Q_PROPERTY 声明并且是 DESIGNABLE 为 true 的属性,这就是所谓的 widget editing mode。另外还有 signal and slot editing mode,这里可以直接把发出 signal 的 widget 拖向 slot 的 widget,这会产生一根箭头,然后填写对应的 signal 和 slot 即可。在 buddy editing mode 里,我们将一些原则上不接受键盘响应 widget 拖向相关接受键盘响应的 widget,这将让他们具有等效力的处理键盘的能力。在 tab order mode 里面我们设置按 TAB 时遍历的顺序。另外还有 resource editor 供我们管理资源,如使用的图片,action editor 让我们编辑菜单上的 action(最后将菜单项 or 工具栏与之连接)。新加入的 QUiLoader 类允许 Qt 能像 glade 一样处理 XML 文件描述的界面,并动态生成。

Qt 提供的当然远远不止仅仅一些 widget(与 gtkmm 相比),它还提供了对 accessibility、数据库 SQL、网络模块等等的支持,这个我们会在后文讨论。这里集中讨论 Qt designer 一些设计上的特性。

Qt Designer 里面可以预览 skin、添置自己的类似 CSS 的 stylesheet 将 widget 改变样式,这可以用 settings -> preference -> form 里面的 preview 打开,或者直接点某个 widget 的 styleSheet 自己添加。Qt 里面常用的 container 有 Frame、GroupBox、StackedWidget、TabWidget、ToolboxWidget、DockWidget,我们可以在里面放 其他的 widget。

Qt 设计菜单和工具栏很简单,界面和功能是分开设计的,界面在编辑状态依照要求点击对应的地方就可以增加菜单项,菜单里面 & 可以产生一个键盘操作,如 &File 就会使得当菜单打开后按 F 调用该菜单。类似的,添加工具栏后可以在上面增加一些按钮。功能是用 Action Editor 编辑的。

下面我们来看如何利用 Qt Designer 设计的界面和我们的程序结合起来。首先要了解 Qt Designer 输出的 .ui 文件最后会被如何处理,这是 uic 程序所处理的,这会产生一个 .h 文件,比如 mywindow.ui 会产生一个 ui_mywindow.h 文件,该文件包含两个部分,一个是 Ui_MyWindow 类,这个类其实仅仅包含除了顶层 widget 以外所有的 widgets,比如我们的窗口用 QMainWindow 或者 QWidget 类,里面有若干 layout、button 等,那么产生的 Ui_MyWindow 类含有除了 QMainWindow 或 QWidget 外所有其他 components 的指针,并通过 setupUi( QMainWindow *) 方法将我们设计的界面呈现在指定的顶层 widget 上。另外在 Ui 名域空间声明了一个 MyWindow 类,继承 Ui_MyWindow,这是为了避免 namespace pollution。因此,预览我们窗体最简单的方法是用如下代码,

#include "ui_main.h"

int main( int argc, char *argv[] )  
{  
  QApplication app( argc, argv ) ;  
  QMainWindow *widget = new QMainWindow ;  
  Ui::MainWindow ui ;  
  ui.setupUi( widget ) ;  
  widget -> show() ;  
  return app.exec() ;  
}  
我 们会在后面详细分析这里面相关代码,这里注意通过 new 产生一个 QMainWindow,然后注意用 Ui::MainWindow 产生一个仅仅生成代码的类实体,并且调用 setupUi() 方法在 widget 上产生我们需要的界面。最后调用 widget 的 show() 方法,并用 app.exec() 开始进入消息循环。

这里插一段关于 widget 释放的问题,注意 ui 里面通过调用 new 产生的控件在 widget 被摧毁的时候一起被摧毁,ui 里面并没有析构这些,因为其实最后都是 dangling pointer,这是很危险的,千万不要多做这一步。另外关闭窗口时会触发 QMainWindow::close() 这个 slot,这会析构窗体(如果设置 QWidget::DeleteOnClose 属性)。

可是我们在 Qt Designer 里面最多加入很简单的 signal/slot 连接,还有很多功能我们并不是在 Qt Designer 里面实现的,因此,我们需要用别的方式才能在不修改这部分自动生成代码的基础上实现自己的功能。最简单的办法就是单继承窗体类,把界面作为一个私有成员,

class MyWindow : public QMainWindow
{  
        // ...
private:  
        Ui::MyWindow ui ;  
} ;  
这样在构造 MyWindow::MyWindow() 时通过 ui(this) 就可以创建自己的界面,然后进一步通过 QObject::connect() 等函数修改 signal/slot 连接。但是连接必须通过成员 ui 进行。

更方便的做法是使用多重继承,

class MyWindow : public QMainWindow, private Ui::MyWindow
{  
         // ...
public:  
         MyWindow( QWidget *p ) : QMainWindow(p), Ui::MyWindow() {  
         setupUi( this ) ;  
         // ...
         }  
} ;
这时我们可以直接对 MyWindow::component 进行 connect。不过值得注意的是 connect 只能在 QObject 之间进行,无法传递给非 QObject 对象,也无法 connect 到一般的函数。

另外一种就是和 glade 实现的类似,

QWidget* TextFinder::loadUiFile()
{  
      QUiLoader loader;  

      QFile file(":/forms/textfinder.ui");  
      file.open(QFile::ReadOnly);  

      QWidget *formWidget = loader.load(&file, this);  
      file.close();  

      return formWidget;  
}  
注意这样动态加载的不能使用 formWidget -> member 的形式调用,我们应该利用 QObject::objectName() 来搜索获得对应的地址,如

ui_findButton = qFindChild(this, "findButton");
我们后面会比较 gtkmm 在实现类似的功能上的区别。

创建 connection 最土的办法就是手工创建,因为前面说必须 connect 到一个 QObject 上,所以最直接的做法如下

ImageDialog::ImageDialog(QWidget *parent)  
     : QDialog(parent)  
{  
      setupUi(this);  
      okButton->setAutoDefault(false);  
      cancelButton->setAutoDefault(false);  
      // ...
      connect(okButton, SIGNAL(clicked()), this, SLOT(checkValues()));  
}  
把 slot 就放在多重继承 QObject 的 private slots 里,但是 Qt 可以利用 QMetaObject 实现自动的连接,这是用约定的 on_objectName_signal 定义的 slots,用 QMetaObject::connectSlotsByName(QObject *) 连接,如多重继承的情况下,取 this,而从 ui 文件产生的界面用 QUiLoader::load() 返回的 widget 指针。一般用 uic 产生的代码会自动调用该函数。

 

一个链接的错误, 程序结构很简单, 就是designer设计主界面,在代码里用多重继承方式使用, 奇怪的错误信息如下:

moc_mainwin.cpp:39: error: ‘staticMetaObject’ is not a member of ‘Ui::MainWindow’
moc_mainwin.cpp: In member function ‘virtual void* MainWin::qt_metacast(const char*)’: moc_mainwin.cpp:56: error: ‘qt_metacast’ is not a member of ‘MainWin::qt_metacast(const char*)::QMocSuperClass’
moc_mainwin.cpp: In member function ‘virtual int MainWin::qt_metacall(QMetaObject::Call, int, void**)’: moc_mainwin.cpp:62: error: ‘qt_metacall’ is not a member of ‘MainWin::qt_metacall(QMetaObject::Call, int, void**)::QMocSuperClass’
make: *** [moc_mainwin.o] Error 1

                Qt 自动生成的moc文件竟然也会编译出错?这可真有点匪夷所思。笔者把工程拿过来从头看到尾也没有看出任何错误可能会导致这个链接错误。 N长时间后,一个编译阶段报出的warning引起了笔者注意,大意是说多重继承不能从两个QObject类继承, 这就怪了,它怎么会把我的UI类也当成是从QObject派生的呢?有了这个提示,笔者尝试着修改多重继承的那行代码:

class MainWin: public Ui::MainWindow, public QWidget

改为

class MainWin: public QWidget, public Ui::MainWindow

                结果你猜怎么着?奇迹发生了……呵呵,编译成功!原来竟然是继承的顺序造成的问题。 莫非这是Qt的bug?给trolltech support发bug report得到了这样的回答:

This is actually a known limitation which has been documented for some time, when using multiple inheritance you have to specify the QObject based class first and then the other class. Its mentioned in the documentation at:

http://doc.trolltech.com/4.5/moc.html

under the limitations section.

原来如彼! 看来咱的道行还不够,这么重要的文档竟然从来都不知道它的存在。

仔细阅读一下居然发现还有不少Qt中和moc相关的编程限制需要我们注意, 各位看官也来受受再教育吧:

moc的功能数一数

1、处理Q_OBJECT宏和signals/slots关键字,生成信号和槽的底层代码

2、处理Q_PROPERTY()和Q_ENUM()生成property系统代码

3、处理Q_FLAGS()和Q_CLASSINFO()生成额外的类meta信息

4、不需要moc处理的代码可以用预定义的宏括起来,如下:

#ifndef Q_MOC_RUN
…
#endif

moc的限制数一数(太多了,眼花缭乱)

1、模板类不能使用信号/槽机制

2、moc不扩展宏,所以信号和槽的定义不能使用宏, 包括connect的时候也不能用宏做信号和槽的名字以及参数

3、从多个类派生时,QObject派生类必须放在第一个, 因为moc是这么认为的…(比较流氓) 这也是我们前面的例子触犯的天条

4、函数指针不能作为信号或槽的参数, 因为其格式比较复杂,moc处理不了。 但可以用typedef把它定义成简单的形式再使用。(这招可真够绝的)

5、 用枚举类型或typedef的类型做信号和槽的参数时,必须fully qualified。这个词中文不知道怎么翻译才合适,简单的说就是, 如果是在类里定义的, 必须把类的路径或者命名空间的路径都加上, 防止出现混淆。如Qt::Alignment之类的,前面的Qt就是Alignment的qualifier, 必须加上,而且有几级加几级。

6、信号和槽不能返回引用类型

7、signals和slots关键字区域只能放置信号和槽的定义,不能放其它的如变量定义等

呵呵,这些限制条款感觉颇像不平等条约, 是不是让你大开眼界了呢? 其实这些限制有一部分应该当作bug来论处, 只是对Qt编程影响不算太大,可暂时忽略,所以被归入优先级很低的问题处理了(意思就是可能永远都不改了)。
开源大语言模型GLM-5:从架构解析到部署微调全指南 大语言模型(LLM)作为当前人工智能领域的核心技术,通过海量数据预训练获得强大的语言理解和生成能力。其核心原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,在通用语言任务上展现出卓越性能。这一技术价值在于为开发者提供了强大的基座模型,能够通过微调快速适配特定领域需求,显著降低AI应用开发门槛。在实际应用场景中,大模型被广泛用于智能对话、代码生成、内容创作等任务。本文以开源项目GLM-5为例,深入探讨其架构特点,并详细介绍了如何使用LoRA技术进行参数高效微调,以及通过量化优化实现模型在 阅读详情

相关推荐

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 460

qt基础之d_ptr和q_ptr

d_ptr在QObject中,q_ptr在QObjectData。

多看多听多总结 859

【微信小程序开发与设计】垃圾智能分类小程序

垃圾分类是将来生活可持续发展的必需项。但是很多人由于缺乏垃圾分类知识,或是因为垃圾分类困难,费时费力,所以没有好好贯彻垃圾分类政策,此时设计一款方便于群众进行智能化垃圾识别分类的微信小程序就显得尤为必要。

Markelle_Fultz的博客 8246

error: C2039: “staticMetaObject”: 不是“QGraphicsItem”的成员

当使用Qt的图形视图框架时,自定义图形类时,一般这样写 class myItem:public QGraphicsItem { public: myItem(); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QRectF boundingR...

huhuandk的博客 4424

DC-DC电源芯片SY8303电路设计

SY8303高效率同步降压DC-DC转换器。这款芯片特别适用于需要较大负载电流(高达3A)的应用。SY8303在较宽的输入电压范围(4.5V至40V)内工作,能够将输入电能高效地转换为输出电能。此外,为使运行更为稳定,SY8303集成了主要的开关和同步开关,其导通电阻(RDS(ON))非常低,可以最大限度地减少导通损耗。一些特性,如短路保护、热关断以及自动恢复等,也有助于增强其可靠性和耐用性。

LuDvei的博客 9675

基于大模型的癫痫手术预测与决策系统技术方案文档

基于大模型的癫痫手术预测与决策系统技术方案文档

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 976

QObject源码剖析-d指针和q指针

可以看到QObjectPrivate为QObjectData的子类,从QObject的构造函数可以看出,QObject和QObjectPrivate互相拥有对方的对象指针,那么QObject为什么要这么做呢?实际上QObject的成员变量都放在QObjectPrivate中,为什么要将成员变量放在QObjectPrivate中然后在QObject中使用D指针d_ptr呢?其实q指针和d指针利用的变成技巧c++PIMPL,有兴趣可以去查找相关资料。上面的d_ptr和q_ptr就是d指针和q指针。.......

bureau123的博客 606

基于YOLOv8的表面裂痕等缺陷检测:深度学习与UI界面的实践

本文详细介绍了如何使用YOLOv8进行表面裂痕等缺陷检测,并结合图形用户界面展示检测结果。通过YOLOv8的强大能力,我们可以实现高效、准确的表面缺陷检测,提升工业产品的质量控制水平。未来,随着深度学习技术和数据集的不断发展,表面缺陷检测的精度和速度将不断提升,应用领域也将进一步拓展。希望本文的实践能够为深度学习在工业检测领域的应用提供一些启示。

YOLO 550

重写QtTreeWidgetItem类

重写QtTreeWidgetItem类,增加Item属性

ycf623106997的博客 1098

【连接器专题】 EIA-364 系列标准的完整列表

EIA-364 系列标准在电子工业中具有重要的地位,为电子连接器和互连系统的测试和验证提供了统一的、可操作的流程和方法,有助于提高电子产品的质量和可靠性,促进了电子工业的发展

一点硬件 2660

封装POD与PinMap文件总结学习-20250516

芯片封装外形图(POD)和PinMap是芯片设计和制造中的关键文档。POD详细描述了芯片的物理尺寸、引脚布局和封装类型,而PinMap则提供了芯片封装上各个引脚的位置、名称和功能的详细信息。这些文档在芯片设计、制造和应用过程中起到“地图”的作用,帮助设计人员理解芯片的物理和电气特性。在PCB设计中,POD用于确定socket的footprint和pogo的选型,而PinMap则用于器件的合理布局和布线。这些信息对于确保芯片的正确安装和功能至关重要。

歌颂苦难的行为是无耻的; 2370

继承QTreeWidgetItem发生error: 'staticMetaObject' is not a member of 'QTreeWidgetItem' 错误 .

今天编译Qt代码时遇到以下问题,记录一下。 继承QTreeWidgetItem发生error: 'staticMetaObject' is not a member of 'QTreeWidgetItem' 错误

nancyxin的专栏 809

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

QTreeWidgetItem

QTreeWidgetItem 是 Qt 的一个类,用于在 QTreeWidget 中显示项目。QTreeWidget 是一个继承自 QTreeView 的控件,用于显示树状结构的数据。QTreeWidgetItem 将每个项目作为一个独立的对象进行管理,可以为其设置文本、图标、数据等属性,并且支持拖放操作。使用 QTreeWidget 时,通常需要创建许多 QTreeWidgetItem 对象来...

weixin_35753291的博客 541

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Qt编译报错 'staticMetaObject' is not a member of 'xxxx'

qt编译报错,说什么静态元对象不是xxx类的成员,xxx类确实不是继承自QObject,仔细看了自己的代码后发现子类继承的时候一个是从QObject派生,一个是从xxx类. 我的写法 class A : public xxx,public QObject { } 而派生的子类需要用到元对象系统的属性,信号与槽啊这些个东西,改一下派生的循序就ok,把QObject放前面,xxx类放后面就ok. 改成...

weixin_44608669的博客 3589

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

QObject的d_ptr成员——箭头符号的重载

箭头操作符的重载

行者不止 2568

Qt QObject

【1】Qt的QObject 1.测试代码如下: 1 #include&lt;QApplication&gt; 2 #include&lt;QPushButton&gt; 3 #include&lt;QDebug&gt; 4 using namespace std; 5 6 int main(int argc, char *argv[]) 7 { 8 ...

weixin_33972649的博客 627

读QT5.7源码(七)QObjectData 和 QObjectPrivate

在QObject中定义了一个保护权限的成员变量 d_ptrprotected: QScopedPointer d_ptr; QScopePointer QObject 几乎是所有QT中的类的基类,因此QT中每个继承于Qobject的类都有这个指针,指向一个动态分配的QObjectData对象。 QObjectData类的定义 class Q_CORE_E

春暖花开 4482

Qt源码之d指针分析(QObject,QObjectPrivate)

前言   阅读过Qt源码的同学一定对d指针不陌生,前段时间其实写过一次关于Qt d指针的文章,但是感觉不够透彻就删除了,这次打算彻底地详细地再分析一次。 Pimpl机制   对Pimpl机制不熟悉的先熟悉下Pimpl机制Pimpl机制。Qt的d指针其实主要还是采用了Pimpl机制。关于Pimpl机制的优点: 降低耦合 信息隐藏 降低编译依赖,提高编译速度 接口与实现分离   其实Pimpl机制...

亅会飞的乌龟的博客 4678

Leetcode每日一题:面试题02.02.kth-node-from-end-of-list-lcci(返回倒数第k个节点)

思路:典型得快慢指针问题,快指针与慢指针中间隔着k-2个节点,那么同时++快慢指针,当快指针指向链表结尾节点时,慢指针指向倒数第k个节点; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; int kthToLast(ListNode *head, int k) { ListNode *left = head, *right = head; int count = 1; .

CodeLuweir 的博客 3437
上一篇: Qt学习笔记,设置QTabWidget的TabBar的属性
下一篇: Qt学习笔记,QWidget和QMainWindow新认识
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值