基于QT的异质链表实例

所谓的异质链表就是的节点元素类型可以不同。本实例采用C++抽象类和多态实现。

#include <QApplication>
#include<QPushButton>
#include<QLabel>
// 基类
class base
{
public:
  virtual void show()=0;
};

//异质链表
class LinkList
{
private:
    struct Node
    {
        base *pb;//数据域指针
        Node *next;
    };
    Node *phead;
public:
    void addNode(base *pb)
    {
        Node *pnode = new Node;
        pnode->pb=pb;
        pnode->next=NULL;
        if(phead==NULL)
        {
            phead=pnode;

        }
        else//采用头插法
        {
          pnode->next=phead;
          phead=pnode;
        }
    }
    void clearall()
    {

        if(phead==NULL)
        {
            return;
        }
         Node *pnode=phead;
         Node *ptmp;
         while(pnode!=NULL)
         {
            ptmp=pnode;
            pnode=pnode->next;
            delete ptmp;
         }
         phead=NULL;
    }

    void showall()
    {
         if(phead==NULL)
         {
             return;
         }
         Node *pnode=phead;
         while(pnode!=NULL)
         {
            pnode->pb->show();
            pnode=pnode->next;
         }
    }
    LinkList()
    {
        phead=NULL;
    }
    ~LinkList()
    {
        this->clearall();
    }

};

class MyButton:public base
{
private:
    QPushButton bt;
public:
    void show()
    {
        bt.setText("button");
        bt.show();
    }
};

class MyLabel:public base
{
private:
    QLabel label;
public:
    void show()
    {
        label.setText("label");
        label.show();
    }
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);

   LinkList list;
   MyLabel label;
   MyButton btn;

   list.addNode(&label);
   list.addNode(&btn);

    list.showall();
    return a.exec();
}

运行结果:

版权声明:欢迎转载,如有不足之处,恳请斧正。

时间: 2024-11-12 05:19:59

基于QT的异质链表实例的相关文章

基于Qt有限状态机人工智能的一种实现及改进方法

基于Qt有限状态机人工智能的一种实现及改进方法 人工智能在今年是一个非常火的方向,当然了,不仅仅是今年,它一直火了很多年,有关人工智能的一些算法层出不穷.人工智能在很多领域都有应用,就拿我熟悉的游戏领域来说吧,一些寻路算法,比如说A*算法(我的<十日驱鬼记>就曾经使用了A*算法进行寻路),还有一些高级的算法,比如说决策树等,都在游戏中得以了广泛的应用.我目前想制作的项目和人工智能也有一定的关系,因此,我这个月开始学习搭建一些简单的人工智能框架. 蒋彩阳原创文章,首发地址:http://blog

异质链表

8.5.2异质链表 程序中,用基类类型指针,可以生成一个连接不同派生类对象的动态链表,即每个结点指针可以指向类层次中不同的派生类对象. 这种结点类型不相同链表称为异质链表. 比如:任务管理器,使用异质链表实现. 使用QT,建立一个异质链表,使其可以存储多个类的对象,包括Dialog,QLabel,QPushButton 1 #include "mainwindow.h" 2 #include <QApplication> 3 #include<QPushButton&

基于Qt有限状态机的一种实现方式和完善的人工智能方法

基于Qt有限状态机的一种实现方式和完善的人工智能方法 人工智能在今年是一个非常火的方向,当然了.不不过今年,它一直火了非常多年,有关人工智能的一些算法层出不穷.人工智能在非常多领域都有应用,就拿我熟悉的游戏领域来说吧,一些寻路算法,比方说A*算法(我的<十日驱鬼记>就以前使用了A*算法进行寻路).另一些高级的算法,比方说决策树等.都在游戏中得以了广泛的应用.我眼下想制作的项目和人工智能也有一定的关系,因此.我这个月開始学习搭建一些简单的人工智能框架. 蒋彩阳原创文章,首发地址:http://b

一种基于Qt的可伸缩的全异步C/S架构服务器实现(六) 整合各个模块实现功能

在前面的章节中,介绍了网络传输.任务线程池.数据库和集群四个主要功能模块.到现在为止,这些模块都还只是一种资源,没有产生实际的运行效果.对一个具备真实功能的应用来说,需要有一个整合的过程.整合方法很多,这里以典型的客户 -客户通信来举例说明. (一)类结构 1."客户端" 这个概念被抽象为一个节点类st_clientNode,每个客户端连接对应了该类的一个实例.这个类不但存储了有关该连接的所有背景信息(比如聊天程序中的用户名等),还提供了正确解释数据流的代码实现.由于想分开传输层和应用

一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)

本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数目,从而在高传输负荷.高计算符合上达成取舍.数据处理采用流水线结构,以避免少量客户的密集计算请求影响其他客户端的处理.本文对应的代码符合LGPL协议,可直接从https://github.com/goldenhawking/zpserver下载. 也可从http://download.csdn.ne

10分钟学会基于ASP.NET的 JQuery实例 (转)

本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.2.6.js" type="text/javascript"></script>即可,当然,由于微软已经把JQuery集成到VS里,所以你可以到WWW.ASP.NET/aj

QT开发(六十五)——QT样式表编程实例

QT开发(六十五)--QT样式表编程实例 一.QComboBox组合框样式定制 1.基本定义 QComboBox  {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容     min-width: 9em;   # 组合框的最小宽度 } QComboBox::drop-down {     subcontrol-origin: padding;   

一种基于Qt的可伸缩的全异步C/S架构服务器实现(一) 综述

本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数目,从而在高传输负荷.高计算符合上达成取舍.数据处理采用流水线结构,以避免少量客户的密集计算请求影响其他客户端的处理.本文对应的代码符合LGPL协议,可直接从https://github.com/goldenhawking/zpserver下载. 也可从http://download.csdn.ne

Lumina将是基于 Qt工具箱,旨在取代KDE成为PC-BSD默认的桌面环境

Lumina Desktop 1.1.0 发布了,该版本是重要更新,包括全新的以及完全重新编写的utilities,并对底层基础架构进行改进. Lumina将是基于 Qt工具箱,旨在取代KDE成为PC-BSD默认的桌面环境.现阶段 Lumina被认为尚处于早期alpha状态,但已被PC-BSD的软件包仓库收录,它的目标是成为一个轻量级的.稳定而快速的桌面环境. http://www.oschina.net/news/78293/lumina-desktop-1-1-0