爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【QT】QT模型/视图

      首页 知识中心 大数据 文章详情页

      【QT】QT模型/视图

      2024-09-24 06:30:13 阅读次数:46

      qt

      模型/视图编程

      Qt中的模型/视图架构用来实现大量的数据存储、处理及显示。

      MVC(Model-View-Controller)包括了3个组件:模型(model)是应用对象,用来表示数据;视图(View)是模型的用户界面,用来显示数据;控制(Controller)定义了用户界面对用户输入的反应方式。

      委托(Delegate)用于定制数据的渲染和编辑方式。

      【QT】QT模型/视图

      模型

      所有的模型都基于QAbstractItemModel类,该类提供了十分灵活的接口来处理各种视图,这些视图的数据表现形式为表格(table)、列表(list)、树(tree)。

      Qt提供了一些现成的模型来处理数据项:

      QStringListModel存储简单的QString项目列表;

      QStandardItemModel管理复杂的属性结构数据项,每一个数据项可以包含任意的数据;

      QFileSystemModel、QSqlTableModel和QSqlRelationTableModel用来访问数据库。

      当标准模型还无法满足需要时,可子类化QAbstractItemModel、QAbstractListModel或QAbstractTableModel来创建自定义的模型。

      常见的3种模型为列表模型、表格模型、树模型,如下图所示:

      【QT】QT模型/视图

      为确保数据的表示与数据获取相分离,Qt引入了模型索引的概念,输入和委托均可通过模型索引来请求数据并显示。只有模型需要知道怎样获取数据,被模型管理的数据类型可以被广泛的定义。模型索引包含一个指针,指向创建他们的模型,使用多个模型时可避免混淆。模型索引QModeIIndex类提供对一块数据的临时引用, 用来修改或检索模型中的数据,获取一个数据项的模型索引必须指定模型的3个属性:行号、列号和父项的模型索引。如:

      QModelIndex index = model->index(row,column,parent);

      也可以通过模型指定的相关数据项对应的模型索引以及特定的角色来获取需要的类型数据,如:
      QVariant value = model->data(index,role);

      常用的角色类型:

      【QT】QT模型/视图

      示例:

      【QT】QT模型/视图

      #include<QApplication>
      #include<QDebug>
      #include<QTreeView>
      #include<QStandardItemModel>
      int main(int argc,char* argv[])
      {
      QApplication a(argc,argv);
      //创建标准项模型
      QStandardItemModel model;
      //获取标准项模型的根项,跟项式不可见的
      QStandardItem* parentItem = model.invisibleRootItem();
      //创建标准箱item0,并设置文本
      QStandardItem* item0 = new QStandardItem;
      item0->setText(QString("A"));
      QPixmap pixmap0(50,50);
      pixmap0.fill(Qt::red);
      item0->setIcon(QIcon(pixmap0));
      item0->setToolTip(QString("A项"));
      //将item0作为父项的子项
      parentItem->appendRow(item0);
      parentItem = item0;
      //创建item0的子项
      QStandardItem* item1 = new QStandardItem;
      item1->setText(QString("B"));
      QPixmap pixmap1(50,50);
      pixmap1.fill(Qt::blue);
      item1->setIcon(pixmap1);
      item1->setToolTip(QString("B项"));

      QStandardItem* item2 = new QStandardItem;
      QPixmap pixmap2(50,50);
      pixmap2.fill(Qt::green);
      item2->setData("C",Qt::EditRole);
      item2->setData("indexC",Qt::ToolTipRole);
      item2->setData(QIcon(pixmap2),Qt::DecorationRole);

      parentItem->appendRow(item1);
      parentItem->appendRow(item2);
      //在树视图中显示数据
      QTreeView view;
      view.setModel(&model);
      view.show();
      //模型问数据
      QModelIndex indexA = model.index(0,0,QModelIndex());
      qDebug()<<"indexA row count:"<<model.rowCount(indexA);
      QModelIndex indexB = model.index(0,0,indexA);
      qDebug()<<"indexB text:"<<model.data(indexB,Qt::EditRole).toString();
      qDebug()<<"indexB toolTip:"<<model.data(indexB,Qt::ToolTipRole).toString();
      return a.exec();
      }

      视图

      Qt提供了QListView、QTabelView视图、QTreeView视图分别实现列表、表格与树视图效果。QListView将数据项显示为一个列表;QTableView将模型中的数据显示在一个表格中;QTreeView将模型中的数据项显示在具有层次的列表中。QTableView和QTreeView在显示项目的时候同时还可以显示标头,通过QHeaderView类实现。自定义视图类是基于QAbstractItemView抽象基类,如实现条形图,饼状图等特殊显示方式。

      【QT】QT模型/视图


      示例1:

      【QT】QT模型/视图

      #include<QApplication>
      #include<QAbstractItemModel>
      #include<QAbstractItemView>
      #include<QDirModel>
      #include<QTreeView>
      #include<QListView>
      #include<QTableView>
      #include<QSplitter>
      int main(int argc,char* argv[])
      {
      QApplication app(argc,argv);
      //创建模型
      QDirModel model;
      //创建树视图、列表视图、表格视图
      QTreeView tree;
      QListView list;
      QTableView table;
      //视图设置模型
      tree.setModel(&model);
      list.setModel(&model);
      table.setModel(&model);
      //设置视图对象的选择方式为多选,list/table选择方式同tree
      tree.setSelectionMode(QAbstractItemView::MultiSelection);
      list.setSelectionMode(tree.selectionMode());
      table.setSelectionMode(tree.selectionMode());
      //树视图双击信号发射后,列表及表格视图刷新内容
      QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelIndex)) );
      QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelIndex)) );
      QSplitter* splitter = new QSplitter;
      splitter->addWidget(&tree);
      splitter->addWidget(&list);
      splitter->addWidget(&table);
      splitter->setWindowTitle(QString("模型/视图"));
      splitter->show();
      return app.exec();
      }

      示例2:

      【QT】QT模型/视图

      #include "weaponmodel.h"

      Weaponmodel::Weaponmodel(QObject* parent):QAbstractTableModel(parent)
      {
      armyMap[1] = QString("空军");
      armyMap[2] = QString("海军");
      armyMap[3] = QString("陆军");
      armyMap[4] = QString("海军陆战队");
      weaponMap[1] = QString("战斗机1");
      weaponMap[2] = QString("战斗机2");
      weaponMap[3] = QString("战斗机3");
      weaponMap[4] = QString("战斗机4");
      weaponMap[5] = QString("战斗机5");
      weaponMap[6] = QString("战斗机6");
      weaponMap[7] = QString("战斗机7");
      weaponMap[8] = QString("战斗机8");
      populateModel();

      }

      int Weaponmodel::rowCount(const QModelIndex &parent)const
      {
      return army.size();
      }

      int Weaponmodel::columnCount(const QModelIndex &parent)const
      {
      return 3;
      }

      //返回指定索引的数据
      QVariant Weaponmodel::data(const QModelIndex &index, int role) const
      {
      if(!index.isValid())
      {
      return QVariant();
      }
      if(role == Qt::DisplayRole)
      {
      switch (index.column()) {
      case 0:
      return army[army[index.row()]];
      break;
      case 1:
      return weaponMap[weaponType[index.row()]];
      break;
      case 2:
      return weapon[index.row()];
      break;
      default:
      return QVariant();
      break;
      }
      }
      return QVariant();
      }

      QVariant Weaponmodel::headerData(int section, Qt::Orientation orientation, int role) const
      {
      if(role == Qt::DisplayRole && orientation == Qt::Horizontal)
      {
      return header[section];
      }
      return QAbstractTableModel::headerData(section,orientation,role);
      }


      void Weaponmodel::populateModel()
      {
      header<<QString("军种")<<QString("种类")<<QString("武器");
      army<<1<<2<<3<<4<<2<<4<<3<<1;
      weaponType<<1<<3<<5<<7<<4<<8<<6<<2;
      weapon<<QString("B-2")<<QString("尼尔兹级")<<QString("阿帕奇")<<QString("黄蜂级")<<QString("比例伯克级")<<QString("AAAV")<<QString("M1A1")<<QString("F-22");
      }

      示例3

      【QT】QT模型/视图

      #include "stringlistmodel.h"

      int StringListModel::rowCount(const QModelIndex &parent) const
      {
      return m_stringList.count();
      }

      QVariant StringListModel::data(const QModelIndex &index, int role) const
      {
      if(!index.isValid())
      {
      return QVariant();
      }
      if(index.row() == m_stringList.size())
      {
      return QVariant();
      }
      if(role == Qt::DisplayRole || role == Qt::EditRole)
      {
      return m_stringList.at(index.row());
      }
      else
      {
      return QVariant();
      }

      }

      QVariant StringListModel::headerData(int section, Qt::Orientation orientation, int role) const
      {
      if(role != Qt::DisplayRole)
      {
      return QVariant();
      }
      //水平表头
      if(orientation == Qt::Horizontal)
      {
      return QString("column %1").arg(section);
      }
      else
      {
      return QString("Row %1").arg(section);
      }
      }

      Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
      {
      if(!index.isValid())
      {
      return Qt::ItemIsEnabled;
      }
      return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
      }

      bool StringListModel::setData(const QModelIndex &index, const QVariant &value, int role)
      {
      //检测索引有效且项目可编辑
      if(index.isValid() && role == Qt::EditRole)
      {
      m_stringList.replace(index.row(),value.toString());
      emit dataChanged(index,index);
      return true;
      }
      return false;
      }

      bool StringListModel::inseratRows(int position, int rows, const QModelIndex &index)
      {
      //告知其它组建指定的行开始插入操作
      beginInsertRows(QModelIndex(),position,position + rows -1 );
      for(int row = 0 ; row < rows; row++)
      {
      m_stringList.insert(position,QString("你好"));
      }
      //告知其它组件完成操作
      endInsertRows();
      return true;
      }

      bool StringListModel::removeRows(int position, int rows, const QModelIndex &index)
      {
      //告知其他组件指定的行开始删除操作
      beginRemoveRows(QModelIndex(),position,position + rows - 1);
      for(int row = 0 ; row < rows;row++)
      {
      m_stringList.removeAt(position);
      }
      //告知其它组件完成操作
      endRemoveRows();
      return true;
      }

      #include<QApplication>
      #include"stringlistmodel.h"
      #include<QListView>
      #include<QTableView>
      int main(int argc,char* argv[])
      {
      QApplication app(argc,argv);
      QStringList list;
      list<<QString("太阳")<<QString("地球")<<QString("月亮")<<QString("木星");
      StringListModel model(list);//创建模型
      model.insertRows(3,2);
      model.removeRows(0,1);

      QListView listView;//创建列表视图
      listView.setModel(&model);//视图设置模型
      listView.show();//视图显示

      QTableView tableView;//创建表格视图
      tableView.setModel(&model);//视图设置模型
      tableView.show();//视图显示
      return app.exec();
      }

      示例4:

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      #include<QStandardItem>
      #include<QDebug>
      MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MainWindow)
      {
      ui->setupUi(this);

      //创建标准项模型,7行4列
      QStandardItemModel* model = new QStandardItemModel(7,4,this);
      for(int row = 0 ; row <7 ;row++)
      {
      for(int colum= 0;colum < 4;colum++)
      {
      QStandardItem* item = new QStandardItem(QString("%1").arg(row+4 +colum));
      //标准模型设置数据项
      model->setItem(row,colum,item);
      }
      }
      m_tableView = new QTableView;
      m_tableView->setModel(model);
      setCentralWidget(m_tableView);//设置主窗口的中心部件为表格视图
      QItemSelectionModel *selectionModel = m_tableView->selectionModel();//获取视图的选择模式
      QModelIndex topLeft;//左上角模型索引
      QModelIndex bottomRight;//右下角模型索引
      topLeft = model->index(1,1);
      bottomRight = model->index(5,2);
      //创建模型选择
      QItemSelection selection(topLeft,bottomRight);
      //以选择的方式来选择项目
      selectionModel->select(selection,QItemSelectionModel::Select);
      //添加动作addAction(动作文本,响应者,槽方法)
      ui->menuBar->addAction(QString("当前项目"),this,&MainWindow::getCurrenItemData);
      ui->menuBar->addAction(QString("切换选择"),this,&MainWindow::toggleSection);

      //关联选择模型的选择改变、当前项改变的信号
      connect(selectionModel,&QItemSelectionModel::selectionChanged,this,&MainWindow::updateSelection);
      connect(selectionModel,&QItemSelectionModel::currentChanged,this,&MainWindow::changeCurrent);

      m_tableView2 = new QTableView;
      m_tableView2 ->setWindowTitle("tableview2");
      m_tableView2->resize(400,300);
      m_tableView2->setModel(model);
      m_tableView2->setSelectionModel(selectionModel);
      m_tableView2->show();

      }

      MainWindow::~MainWindow()
      {
      delete ui;
      }

      void MainWindow::getCurrenItemData()
      {
      qDebug()<<QString("当前项数据:")<<m_tableView->selectionModel()->currentIndex().data().toString();
      }

      void MainWindow::toggleSection()
      {
      //左上角模型索引
      QModelIndex topLeft = m_tableView->model()->index(0,0,QModelIndex());
      //右下角模型索引
      QModelIndex bottomRight = m_tableView->model()->index(m_tableView->model()->rowCount((QModelIndex))-1,m_tableView->model()->columnCount(QModelIndex())-1,QModelIndex());
      //项选择
      QItemSelection curSelection(topLeft,bottomRight);
      m_tableView->selectionModel()->select(curSelection,QItemSelectionModel::Toggle);
      }

      void MainWindow::updateSelection(const QItemSelection &selected, const QItemSelection &deselected)
      {
      QModelIndex index;
      //indexes返回所有选择项的模型索引
      QModelIndexList list = selected.indexes();
      //给现在选择的项目填充数据
      foreach (index,list)
      {
      QString text = QString("%1,%2").arg(index.row()).arg(index.column());
      m_tableView->model()->setData(index,text);
      }
      //清空 上一次选择的内容
      list = deselected.indexes();
      foreach (index,list)
      {
      m_tableView->model()->setData(index,"");
      }
      }

      void MainWindow::changeCurrent(const QModelIndex ¤t, const QModelIndex &previous)
      {
      qDebug()<<QString("从(%1,%2)到(%3,%4)").arg(previous.row()).arg(previous.column()).arg(current.row()).arg(current.column());
      }

      委托

      在模型/视图框架中,QAbstractItemDelegate是委托类的抽象基类,Qt默认的委托实现由QStyledItemDelegate类提供,这也被用作Qt标准视图的默认委托,选择 QStyledItemDelegate或QItemDelegate中其一来为视图中的项目绘制和提供编辑器。不同的是QStyledItemDelegate使用当前的样式来绘制项目,实现自定义委托建议使用QStyledItemDelegate作为基类。

      Qt提供了项目试图的便捷类,这些类底层通过模型/视图框架实现。这些部件分别是QListWidget提供一个项目列表,QTreeWidget显示一个多层次的树结构,QTableWidget提供了一个以项目作为单元的表格。它们每一个类都继承了QAbstractItemView类的行为。之所以成为便捷因其用起来比较简单,使用于少量的数据的存储和显示。因没有将视图与模型分离,所以没有视图类灵活,不能和任意的模型一起使用。

      通过自定义委托来实现更高级的渲染。

      示例:QSpinbox

      【QT】QT模型/视图

      #include "spinboxdelexgate.h"
      #include<QSpinBox>

      SpinBoxDelexgate::SpinBoxDelexgate(QObject* parent):QItemDelegate(parent)
      {

      }

      QWidget *SpinBoxDelexgate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
      {
      QSpinBox *editor = new QSpinBox(parent);
      editor->setMinimum(0);//最小值
      editor->setMaximum(100);//最大值
      return editor;
      }

      void SpinBoxDelexgate::setEditorData(QWidget *editor, const QModelIndex &index) const
      {
      int value = index.model()->data(index,Qt::EditRole).toInt();
      //类型转换:QWidget* 转QSpinBox*
      QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
      //编辑器设置数据
      spinBox->setValue(value);
      }

      void SpinBoxDelexgate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
      {
      //视图设置自定义委托
      editor->setGeometry(option.rect);
      }

      便捷部件类

      示例:

      【QT】QT模型/视图

      #include<QApplication>
      #include<QDebug>
      #include<QListWidget>
      #include<QTreeWidget>
      #include<QTableWidget>

      int main(int argc,char* argv[])
      {
      QApplication app(argc,argv);
      QListWidget listWidget;
      //添加项目
      new QListWidgetItem("天涯",&listWidget);

      QListWidgetItem* listWidgetItem = new QListWidgetItem;
      listWidgetItem->setText("海角");

      QPixmap pixmap(50,50);
      pixmap.fill(Qt::blue);
      listWidgetItem->setIcon(QIcon(pixmap));
      listWidgetItem->setToolTip("大海的角落");

      //部件插入项目
      listWidget.insertItem(1,listWidgetItem);
      //部件设置排序(降序)
      listWidget.sortItems(Qt::DescendingOrder);

      listWidget.show();

      //创建树部件
      QTreeWidget treeWidget;
      //设置列数
      treeWidget.setColumnCount(2);
      QStringList headers;
      headers<<"名字"<<"数量";
      //设置头
      treeWidget.setHeaderLabels(headers);
      //添加项目
      QTreeWidgetItem *item1 = new QTreeWidgetItem(&treeWidget);//指定父项
      item1->setText(0,"开心超人");
      QTreeWidgetItem *item11 = new QTreeWidgetItem(item1);
      item11->setText(0,"甜心超人");
      item11->setText(1,"小心超人");
      //添加项目,并指定它的前一个项目是item1
      QTreeWidgetItem* item2 = new QTreeWidgetItem(&treeWidget,item1);
      item2->setText(0,"小小怪");
      treeWidget.show();


      //创建表格部件
      QTableWidget tableWidget(3,2);
      QTableWidgetItem *tableWidgetem = new QTableWidgetItem("Tom");
      tableWidget.setItem(1,1,tableWidgetem);
      //创建表格项目,作为表头
      QTableWidgetItem* headerV = new QTableWidgetItem("Cat");
      tableWidget.setVerticalHeaderItem(0,headerV);
      QTableWidgetItem* headerH = new QTableWidgetItem("What");
      tableWidget.setHorizontalHeaderItem(0,headerH);
      tableWidget.show();
      return app.exec();
      }
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_15333750/5867326,作者:半生瓜的blog,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:【算法入门05】从尾到头打印链表

      下一篇:给定一个无序数组,里面数都是成双数的,只有一个数是成单数的,求这个数?

      相关文章

      2025-01-08 08:37:04

      文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

      在栈的基本操作中,我们通常考虑的是单个元素的压入(push)和弹出(pop)操作,这些操作的摊还代价通常是 O(1)。摊还代价考虑的是一系列操作的平均代价,而不是单个操作的最坏情况代价。

      2025-01-08 08:37:04
      代价 , 操作
      2024-09-25 10:15:15

      Ubuntu 安装Qt

      Ubuntu 安装Qt

      2024-09-25 10:15:15
      qt , Ubuntu
      2024-09-24 06:31:02

      【QT】图形视图、动画框架

      Qt提供了图形视图框架(GraphicsView Framework)、动画框架(The Animation Framework)、状态机框架(The State Machine Framework)来实现更加高级的图形与动画应用。使用这些框架可以快速设计出动态GUI应用和各种动画、游戏程序。

      2024-09-24 06:31:02
      c++ , qt , 开发语言
      2024-06-25 08:06:03

      Python编程:sublime打开中文文本乱码

      Python编程:sublime打开中文文本乱码

      2024-06-25 08:06:03
      linux , python , qt
      2024-06-24 08:13:04

      【QT】QT富文本

      QTextEdit支持富文本处理,即文档中可使用多种格式,如文字、图片、表格等。

      2024-06-24 08:13:04
      qt
      2024-06-24 08:13:04

      【QT】QString、QLatin1String、QStringLiteral

      QString提供了一个Unicode字符串,QString存储的是一串QChar,而QChar提供了16位的Unicode字符,后台使用隐式共享减少了内存的开销。

      2024-06-24 08:13:04
      c++ , qt , 开发语言
      2024-06-24 08:13:04

      【QT】QT透明及阴影

      【QT】QT透明及阴影

      2024-06-24 08:13:04
      qt , ui , 开发语言
      2024-06-24 08:13:04

      【QT】QT不规则窗体效果——遮罩

      【QT】QT不规则窗体效果——遮罩

      2024-06-24 08:13:04
      qt , ui , 开发语言
      2024-06-24 08:13:04

      【QT】QT基本图形绘制

      QPainter画弧度所使用的角度值,是以1/16°为单位的,在画弧度的时候1°用16表示。

      2024-06-24 08:13:04
      qt , ui , 开发语言
      2024-06-24 08:13:04

      【QT】QT打印调试信息

      【QT】QT打印调试信息

      2024-06-24 08:13:04
      qt
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5220375

      查看更多

      最新文章

      文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

      2025-01-08 08:37:04

      QT界面操作之QTableview如何获取某一行一列的数据

      2024-06-13 08:07:37

      查看更多

      热门文章

      QT界面操作之QTableview如何获取某一行一列的数据

      2024-06-13 08:07:37

      文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

      2025-01-08 08:37:04

      查看更多

      热门标签

      算法 leetcode python 数据 java 数组 节点 大数据 i++ 链表 golang c++ 排序 django 数据类型
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      QT界面操作之QTableview如何获取某一行一列的数据

      文心一言 VS 讯飞星火 VS chatgpt (230)-- 算法导论17.1 1题

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号