当前位置: 首页 > news >正文

做制作网站找啥工作新浪博客

做制作网站找啥工作,新浪博客,政府门户网站建设实施方案,自己做网站概述 在使用Qt创建用户界面时,特别是那些具有特殊控件和特性的界面时,开发人员有时需要创建新的数据类型,以便与Qt现有的值类型集一起使用或代替它们。 QSize、QColor和QString等标准类型都可以存储在QVariant对象中,作为基于qo…

概述

在使用Qt创建用户界面时,特别是那些具有特殊控件和特性的界面时,开发人员有时需要创建新的数据类型,以便与Qt现有的值类型集一起使用或代替它们。

QSize、QColor和QString等标准类型都可以存储在QVariant对象中,作为基于qobject的类的属性类型,并在信号槽通信中发出。

在本文中,我们将使用一个自定义类型,并描述如何将其集成到Qt的对象模型中,以便它能够以与标准Qt类型相同的方式存储。然后,我们将展示如何注册自定义类型以允许它在信号和插槽连接中使用。

创建自定义类型

在开始之前,我们需要确保创建的自定义类型满足QMetaType的所有要求。换句话说,它必须提供:

  • 一个公共的默认构造函数,
  • 一个公共复制构造函数,以及
  • 一个公共析构函数。

下面的Message类定义包含了这些成员:

class Message
{
public:Message() = default;~Message() = default;Message(const Message &) = default;Message &operator=(const Message &) = default;Message(const QString &body, const QStringList &headers);QString body() const;QStringList headers() const;private:QString m_body;QStringList m_headers;
};

这个类还提供了一个普通使用的构造函数,以及两个用于获取私有数据的公共成员函数。

用QMetaType声明类型

Message类只需要适当的实现就可以使用。然而,Qt的类型系统将无法理解如何存储,检索和序列化这个类的实例,如果没有一些帮助。例如,我们将无法在QVariant中存储消息值

Qt中负责自定义类型的类是QMetaType。为了让这个类知道类型,我们在定义类的头文件中调用Q_DECLARE_METATYPE()宏:

Q_DECLARE_METATYPE(Message);

这使得将消息值存储在QVariant对象中并在以后检索成为可能。有关演示这一点的代码,请参阅自定义类型示例。

Q_DECLARE_METATYPE()宏也可以将这些值用作信号的参数,但只能在直接的信号槽连接中使用。为了使自定义类型通常可用于信号和插槽机制,我们需要执行一些额外的工作。

创建和销毁自定义对象

虽然前一节中的声明使该类型可用于直接的信号槽连接,但不能用于排队的信号槽连接,例如不同线程中的对象之间的连接。这是因为元对象系统不知道如何在运行时处理自定义类型对象的创建和销毁

要在运行时创建对象,请调用qRegisterMetaType()模板函数将其注册到元对象系统。这也使得该类型可用于排队信号槽通信,只要您在创建第一个使用该类型的连接之前调用它。

排队的自定义类型示例声明了一个注册在main.cpp文件中的块类:

int main(int argc, char *argv[])
{QApplication app(argc, argv);...qRegisterMetaType<Block>();...return app.exec();
}

此类型稍后在window.cpp文件中的信号槽连接中使用:

Window::Window(QWidget *parent): QWidget(parent), thread(new RenderThread(this))
{...connect(thread, &RenderThread::sendBlock,this, &Window::addBlock);...setWindowTitle(tr("Queued Custom Type"));
}

如果在未注册的情况下在排队连接中使用了类型,则将在控制台中打印警告;例如:

QObject::connect: Cannot queue arguments of type 'Block'
(Make sure 'Block' is registered using qRegisterMetaType().)

使类型可打印

使自定义类型可打印用于调试通常是非常有用的,如下面的代码所示:

    Message message(body, headers);qDebug() << "Original:" << message;

这可以通过为该类型创建一个流操作符来实现,该操作符通常在该类型的头文件中定义:

QDebug operator<<(QDebug dbg, const Message &message);

自定义类型示例中Message类型的实现做了一些努力,使可打印的表示尽可能可读:

QDebug operator<<(QDebug dbg, const Message &message)
{const QString body = message.body();QVector<QStringRef> pieces = body.splitRef(QLatin1String("\r\n"), Qt::SkipEmptyParts);if (pieces.isEmpty())dbg.nospace() << "Message()";else if (pieces.size() == 1)dbg.nospace() << "Message(" << pieces.first() << ")";elsedbg.nospace() << "Message(" << pieces.first() << " ...)";return dbg.maybeSpace();
}

当然,发送到调试流的输出可以按照您的喜好设置为简单或复杂。请注意,该函数返回的值是QDebug对象本身,尽管这通常是通过调用QDebug的maybeSpace()成员函数获得的,该函数用空格字符填充流,使其更具可读性。

Creating Custom Qt Types | Qt Core 5.15.17

http://www.khdw.cn/news/9093.html

相关文章:

  • 公司网站建设技术方案模板关键词查找的方法有以下几种
  • 小的电商网站嵌入式培训机构哪家好
  • 昆明网站seo互联网电商平台有哪些
  • 企业官网建站联系我们网站排名优化外包
  • 网站续费要多少钱亚马逊关键词优化软件
  • 如何做网络营销推广企业seo每日一贴
  • 移动网站 pc网站的区别吗磁力蜘蛛
  • 网站排名优化效果网站设计就业
  • 3d效果图教程网站seo关键词怎么选
  • 怎么做五合一网站宁德市旅游景点大全
  • 网站建设全视频教程下载公司在百度怎么推广
  • 山东网站推广公司游戏推广渠道有哪些
  • 手机网站制作教程视频百度爱采购平台登录
  • WordPress跳转之间乱码seo网站分析工具
  • crm客户管理软件平台电脑优化大师下载安装
  • 冀州网站建设价格江苏seo排名
  • 做彩票网站抓到判几年网络推广需要花多少钱
  • 公司网站出现空白页seo每日工作
  • 做公司网站别人能看到吗6学网络运营在哪里学比较好
  • 免备案域名购买网站市场营销策划方案模板
  • django做网站怎样软文范例800字
  • 局网站建设总结在线视频观看免费视频22
  • 提升网站访问量网络推广是什么专业
  • 个人做网站用什么技术做网站的外包公司
  • 专业建设金融行业网站的公司站群seo
  • 东直门小学的网站建设在线建站网页制作网站建设平台
  • 安装wordpress插件目录下seo文章优化技巧
  • 开发网站用什么软件网站单向外链推广工具
  • 专做动漫av的网站怎么在百度打广告
  • wordpress 参数铜川网站seo