最近一直在看Qt5,但网上资源真是少得可怜,自己买了本书,《Qt5开发实战》,说实话没点用,就粗浅的讲了点,所以告诫大家不值得购买,《Qt5开发及实例》到是不错,自己看Qmediaplayer的文档,以及参照网上已有的音乐播放器,写了个自己的音乐播放器,基本实现了本地音乐的播放。下面是源码,可能有很多的BUG,大家可以指出,一起进步, 源码在Qt5.3,5.5都是可以运行的。 项目代码分享:http://pan.baidu.com/s/1hqPppWS 有疑问也可以密我 先发效果图: 下面是核心代码: #include “musicwidget.h” musicWidget::musicWidget(QWidget *parent) :QWidget(parent) { playflag=true; volumeflag=true; this->setWindowFlags(Qt::FramelessWindowHint); //this->setAttribute(Qt::WA_TranslucentBackground);//背景透明 this->setWindowIcon(QIcon(“:images/icon.png”)); this->setMaximumSize(300,600); this->setMinimumSize(300,600); QPixmap pix1(“:images/5.png”); pix1=pix1.scaled(this->width(),this->height()); this->setAutoFillBackground(true); QPalette palette;
palette.setBrush(QPalette::Background, QBrush(QPixmap(pix1)));
this->setPalette(palette);
namelabel=new QLabel;
slider=new QSlider(Qt::Horizontal);
slider->setValue(0);
slider->setMaximum(100);
slider->setFixedSize(300,20);
playBtn=new QPushButton;
playBtn->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
playBtn->setMaximumSize(50,30);
playBtn->setFlat(true);
playBtn->setStatusTip(tr("播放"));
findedit=new QLineEdit;
findedit->setMaximumSize(200,25);
findedit->setMinimumSize(200,25);
findBtn=new QPushButton;
findBtn->setIcon(QIcon(":/images/search.png"));
findBtn->setMaximumSize(50,30);
findBtn->setFlat(true);
QHBoxLayout* findlayout=new QHBoxLayout;
findlayout->addWidget(findedit);
findlayout->addWidget(findBtn);
tablewidget=new QTableWidget;
tablewidget->setColumnCount(3);
tablewidget->setFrameShape(QFrame::NoFrame);
tablewidget->setShowGrid(false);
QPalette pale;
pale.setBrush(QPalette::Base,QColor(255,255,255,0));
tablewidget->setPalette(pale);
tablewidget->setSelectionMode(QAbstractItemView::SingleSelection); // 设置选择的模式为单选择
tablewidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置每次选一行
QWidget* widget1=new QWidget;
QWidget* widget2=new QWidget;
tabwidget=new QTabWidget;
tabwidget->addTab(tablewidget,tr("默认列表"));
tabwidget->addTab(widget1,tr("电台"));
tabwidget->addTab(widget2,tr("收藏"));
QStringList stringlist;
stringlist<setHorizontalHeaderLabels(stringlist);
tablewidget->verticalHeader()->setVisible(false);
tablewidget->horizontalHeader()->resizeSection(0,100);
tablewidget->horizontalHeader()->setStretchLastSection(true);
tablewidget->horizontalHeader()->setStyleSheet("QHeaderView {background-color:255,255,255,0 } "
"QHeaderView::section {background-color:255,255,255,0;"
"color: 255,255,255,0;padding-left: 4px;border: 0px solid 255,255,255,0;}");
playstylecombox=new QComboBox;
playstylecombox->addItem(tr("循环播放"));
playstylecombox->addItem(tr("列表播放"));
playstylecombox->addItem(tr("随机播放"));
playstylecombox->addItem(tr("单曲循环"));
playstylecombox->setStyleSheet("QComboBox{border:1px solid 255,255,255,0;}"
"QComboBox QAbstractItemView::item{height:20px;}"
"QComboBox{background-color:255,255,255,0 }"
"QComboBox::drop-down{border:0px;}");
playlist=new QMediaPlaylist;
closeBtn=new QPushButton;
closeBtn->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
closeBtn->setMaximumSize(50,30);
closeBtn->setFlat(true);
addmusicBtn=new QPushButton;
addmusicBtn->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon));
addmusicBtn->setMaximumSize(70,30);
addmusicBtn->setFlat(true);
stopBtn=new QPushButton;
stopBtn->setIcon(style()->standardIcon(QStyle::SP_MediaStop));
stopBtn->setMaximumSize(50,30);
stopBtn->setFlat(true);
nextBtn=new QPushButton;
nextBtn->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward));
nextBtn->setMaximumSize(50,30);
nextBtn->setFlat(true);
lastBtn=new QPushButton;
lastBtn->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward));
lastBtn->setMaximumSize(50,30);
lastBtn->setFlat(true);
imageBtn=new QPushButton(QIcon(":images/image.png"),tr(" "));
imageBtn->setMaximumSize(50,30);
imageBtn->setFlat(true);
windowminBtn=new QPushButton;
windowminBtn->setIcon(style()->standardIcon(QStyle::SP_TitleBarMinButton));
windowminBtn->setMaximumSize(50,30);
windowminBtn->setFlat(true);
timerlabel=new QLabel;
volumeslider=new QSlider(Qt::Horizontal);
volumeslider->setValue(50);
volumeslider->setMaximum(100);
volumeslider->setFixedSize(50,10);
volumeBtn=new QPushButton;
volumeBtn->setIcon(style()->standardIcon(QStyle::SP_MediaVolume));
volumeBtn->setMaximumSize(50,30);
volumeBtn->setFlat(true);
QHBoxLayout* volumelayout=new QHBoxLayout;
volumelayout->addWidget(namelabel);
volumelayout->addWidget(volumeBtn);
volumelayout->addWidget(volumeslider);
QHBoxLayout* window=new QHBoxLayout;
window->addWidget(imageBtn);
window->addWidget(windowminBtn);
window->addWidget(closeBtn);
window->setAlignment(Qt::AlignRight);
QHBoxLayout* layout=new QHBoxLayout;
layout->addWidget(lastBtn);
layout->addWidget(playBtn);
layout->addWidget(stopBtn);
layout->addWidget(nextBtn);
layout->addWidget(addmusicBtn);
layout->addWidget(playstylecombox);
QHBoxLayout* sliderlayout=new QHBoxLayout;
sliderlayout->addWidget(slider);
sliderlayout->addWidget(timerlabel);
QVBoxLayout* v=new QVBoxLayout(this);
v->addLayout(window);
v->addLayout(volumelayout);
v->addLayout(sliderlayout);
v->addLayout(layout);
v->addLayout(findlayout);
v->addWidget(tabwidget);
playlist->setPlaybackMode(QMediaPlaylist::Random);
player = new QMediaPlayer;
player->setPlaylist(playlist);
player->setVolume(50);
connect(volumeslider,SIGNAL(sliderMoved(int)),this,SLOT(setvolumeslider(int)));
connect(volumeBtn,SIGNAL(clicked()),this,SLOT(setNovolume()));
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(changslider(qint64)));
connect(playstylecombox,SIGNAL(currentIndexChanged(int)),this,SLOT(changplaystyle(int)));
connect(windowminBtn,SIGNAL(clicked()),this,SLOT(showMinimized()));
connect(imageBtn,SIGNAL(clicked()),this,SLOT(changimage()));
connect(addmusicBtn,SIGNAL(clicked(bool)),this,SLOT(readfile(bool)));
connect(stopBtn,SIGNAL(clicked(bool)),this,SLOT(playstop()));
connect(playBtn,SIGNAL(clicked(bool)),this,SLOT(playstate()));
connect(nextBtn,SIGNAL(clicked(bool)),this,SLOT(nextplay()));
connect(lastBtn,SIGNAL(clicked(bool)),this,SLOT(lastplay()));
connect(closeBtn,SIGNAL(clicked(bool)),this,SLOT(close()));
connect(tablewidget,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(changplay(int,int)));
connect(playlist,SIGNAL(currentIndexChanged(int)),this,SLOT(updatenamelabel(int)));
connect(slider,SIGNAL(sliderMoved(int)),this,SLOT(showslider(int)));
connect(findBtn,SIGNAL(clicked()),this,SLOT(findmusic()));
}
musicWidget::~musicWidget() {
}
void musicWidget::mouseMoveEvent(QMouseEvent *event) { this->move(event->globalPos() - this->dpos); }
void musicWidget::mousePressEvent(QMouseEvent *event) { this->windowPos= this->pos(); // 获得部件当前位置 this->mousePos = event->globalPos(); // 获得鼠标位置 this->dpos = mousePos - windowPos; // 移动后部件所在的位置 } void musicWidget::showslider(int index) { slider->setValue(index); player->positionChanged(slider->value()); }
void musicWidget::changslider(qint64 p) { slider->setMaximum(player->duration()); slider->setSliderPosition(p);
QTime time(0,p/60000,(p%600000)/1000,0);
timerlabel->setText(time.toString("mm:ss"));
}
void musicWidget::changplaystyle(int) { int v=playstylecombox->currentIndex(); switch (v) { case 1: playlist->setPlaybackMode(QMediaPlaylist::Loop); break; case 2: playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop); case 3: playlist->setPlaybackMode(QMediaPlaylist::Random); case 4: playlist->setPlaybackMode(QMediaPlaylist::CurrentItemOnce); default: break; } }
void musicWidget::playstate() { if(playflag){
player->play();
playBtn->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
}
if(!playflag){
player->pause();
playBtn->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
}
playflag=!playflag;
}
void musicWidget::playstop() { player->stop(); }
void musicWidget::nextplay() { int v=playlist->currentIndex(); if(++v==playlist->mediaCount()) v=0; playlist->setCurrentIndex(v); player->play();
}
void musicWidget::lastplay() { int v=playlist->currentIndex(); if(–v<0) v=0; playlist->setCurrentIndex(v); player->play(); }
QStringList musicWidget::readfile(bool) {
musiclist=QFileDialog::getOpenFileNames(this,tr("选择文件"),tr("/"),tr("music file(*.mp3)"));
for(int i=0;iaddMedia(QUrl::fromLocalFile(path));
QString filename=path.split("/").last();
int rownum=tablewidget->rowCount();
QString str=filename.section("-",1,2);
QString str1=str.split("[").front();
tablewidget->insertRow(rownum);
tablewidget->setItem(rownum,0,new QTableWidgetItem(filename.split("-").front()));
tablewidget->setItem(rownum,1,new QTableWidgetItem(str1));
tablewidget->setItem(rownum,2,new QTableWidgetItem(filename.split(".").last()));
tablewidget->setFocusPolicy(Qt::NoFocus);
tablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
}
return musiclist;
}
void musicWidget::changplay(int index, int ) { playlist->setCurrentIndex(index); player->play(); }
void musicWidget::changimage() { QString imagepath=QFileDialog::getOpenFileName(this,tr(“选择图片”),tr(“/”),tr(“image file(*.png)”)); QPixmap pix2(imagepath); pix2=pix2.scaled(this->width(),this->height()); this->setAutoFillBackground(true); QPalette palette; palette.setBrush(QPalette::Background, QBrush(QPixmap(pix2))); this->setPalette(palette);
}
void musicWidget::updatenamelabel(int index) { namelabel->setText(tablewidget->item(index,1)->text());
}
void musicWidget::setNovolume() { if(volumeflag){ volumeBtn->setIcon(style()->standardIcon(QStyle::SP_MediaVolumeMuted)); player->setVolume(0); } if(!volumeflag){ volumeBtn->setIcon(style()->standardIcon(QStyle::SP_MediaVolume)); player->setVolume(50); } volumeflag=!volumeflag; }
void musicWidget::setvolumeslider(int index) { player->setVolume(index); volumeslider->setValue(index);
}
void musicWidget::findmusic() const { QString findname=findedit->text(); QStringList musicgeshi; QStringList musicer; QStringList tablename; QStringList musicname; for(int i=0;irowCount();i++){ tablename- text();
if(tablename.at(i).indexOf(findname)!=-1){
musicer<item(i,0)->text();
musicname<item(i,1)->text();
musicgeshi<item(i,2)->text();
}
}
tablewidget->setRowCount(tablewidget->rowCount());
// tablewidget->clearFocus();
for(int i=0;isetItem(i,0,new QTableWidgetItem(musicer.at(i)));
tablewidget->setItem(i,1,new QTableWidgetItem(musicname.at(i)));
tablewidget->setItem(i,2,new QTableWidgetItem(musicgeshi.at(i)));
}
} 后期会加入在线播放功能,网易云音乐的API正在学习,不知道用QML好,还是直接写,我要好好规划一下。就这样
你可能感兴趣的:(QT,音乐,源码,qt5,播放器)
贝多芬诞辰250周年纪念
万千星河赴远方
就算不是古典音乐爱好者,你也一定听说过贝多芬。作为古典音乐史上最伟大的音乐家之一,他不仅是古典主义风格的集大成者,同时也是浪漫主义风格的开创者。贝多芬肖像画(1813年)贝多芬的一生共创作了9部交响曲、36首钢琴奏鸣曲、10部小提琴奏鸣曲、16首弦乐四重奏、1部歌剧及2部弥撒曲等等。数量虽然不及前辈海顿、莫扎特多,但他几乎改造了当时所有的音乐表达形式,赋予了它们全新的价值,对后世音乐的发展产生了极
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
倾听铃的声
后端 spring java mvc 开发语言 分布式
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的
关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别
EasyDarwin
EasyDarwin 音视频 ffmpeg 人工智能 大数据 ar
EasyPlayer是一款流媒体播放器系列项目,它支持多种流媒体协议的播放,包括但不限于RTSP、RTMP、HTTP、HLS、UDP、RTP、File等。除此之外,EasyPlayer还支持本地文件播放和多种功能特性,包括本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等。EasyPlayer核心基于ffmpeg,稳定、高效、可靠、可控。随着多年的不断发展和迭代,EasyPlayer基于成功的实践
EasyPlayer播放器系列开发计划2025
xiejiashu
EasyPlayer EasyPlayer EasyPlayer播放器 RTSP播放器 js播放器 Web播放器
EasyPlayer系列产品发展至今,已经超过10年,从最早的EasyPlayerRTSP播放器,到如今维护的3条线:EasyPlayer-RTSP播放器:Windows、Android、iOS;EasyPlayerPro播放器:Windows、Android、iOS;EasyPlayer.js播放器:H5;这3个播放器各有各的应用场景,用户量也是巨大,像RTSP版本的播放器,到今天依然还有很多低
Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)
bug菌¹
Java实战(进阶版) java Java零基础入门 Java并发 线程池 多线程篇
本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行
uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)
十一猫咪爱养鱼
前端组件与功能(开箱即用) uniapp常见问题解决 uniapp vue3 uniapp3小程序授权登录 微信小程序登录获取用户信息教程 获取用户昵称手机号头像信息登录 vue3版本小程序平台授权登录 uniap小程序端用户登录流程 uni完整的小程序平台登录源码
效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是
[spring6: Mvc-网关]-源码解析
推荐阅读:[spring6:Mvc-函数式编程]-源码解析GatewayServerMvcAutoConfiguration@AutoConfiguration(after={HttpClientAutoConfiguration.class,RestTemplateAutoConfiguration.class,RestClientAutoConfiguration.class,FilterAu
Android 媒体播放开发完全指南
安卓开发者
Android Jetpack android 媒体 python
引言在当今移动应用生态中,媒体播放功能已成为许多应用的核心组成部分。无论是音乐流媒体应用、视频平台、播客客户端还是游戏应用,都需要强大的媒体播放能力。Android平台提供了丰富的API来支持各种媒体播放场景。本文将全面介绍Android媒体播放的开发技术,从基础到高级功能实现。一、Android媒体播放基础1.1支持的媒体格式Android原生支持多种媒体格式:音频:MP3、AAC、FLAC、W
互加网课心得体会二
荷包蛋的小屋
夏加儿美术日子过得飞快,没想到上周的打卡到了今天晚上才有时间补上,周末的时候外出两天培训学习,时间很紧张,学习到晚上十点,但是这种充实感是非常棒的,因为周五上的夏加儿美术和快乐音乐,孩子们的作品都没有完成,我让他们带回家周末完成,周末里问孩子拍照发给我的也不多,所以我就决定周一打卡吧。夏加儿美术这一节课为我们带来的是《风景写生》,连续两节课开始侧重于专业知识的讲解,对孩子们的专业美术素养有了更大的
梅花香自苦寒来
观世论道
阿炳塑像夜深人静,独自一人躺在床上,耳边回荡着《二泉映月》,不知不觉中双眼已经湿润,鼻子也酸酸的。这首音乐先是和缓的充满惆怅哀怨的曲调把人带入极度悲凉困苦的境地。然后,旋律又变得跌宕起伏,爆发出对命运奋力抗争的悲壮豪情。最后,曲调又渐渐和缓下来,已没有了开始的那种哀怨悲伤,而是升华到一种与世无争的旷达境地。当然,对于我这个不懂乐谱,没受过专业音乐教育的人来说,也只能得出这样一些直观感受了吧。《二泉
初探数学思维(一):数学概括
JackyFuu
数学培养规则意识;培养周密思维和创新能力“现代电子计算机之父”冯·诺依曼对微积分的评价:微积分是现代数学的第一个成就,而且怎样评价它的重要性都不为过。我认为,微积分比其他任何事物都更清楚地表明了现代数学的发端;而且,作为其逻辑发展的数学分析体系仍然构成了精密思维中最伟大的技术进展。《GEB-一条永恒的金带》,普利策奖,1979,美国,指出有一条永恒的金带把数理逻辑、绘画、音乐等不同领域之间的共同规
二级域名分发系统商业版全开源v3版
CloseAi论坛
程序源码 二级域名分发系统商业版 开源
介绍:名分发-快乐二级域名分发源码主要是二级域名分发网站源码,域名接口配置自己研究吧网盘下载地址:https://zijiewangpan.com/NbX6950sYLn图片:
二级域名分发网站源码 商业版全开源
lskelasi
程序源码 二级域名分发源码 二级域名分发网站源码 源码
介绍:快乐二级域名分发-快乐二级域名分发源码主要是二级域名分发网站源码,不懂的不要下载了。本套源码可设置收费使用,有充值接口,域名接口配置自己研究吧网盘下载地址:https://zijiewangpan.com/jsX0JAuRE01图片:
最新二级域名分发系统网站源码 可商用
huihuixxx
程序源码 小鬼授权系统 源码全解密源码 授权代码 二级域名分发系统 网站源码
介绍:1.源码楼主网上买的没有后门是旧版本2.支付接口调用的是码支付来进行的3.支付接口需要登陆管理员后台安装4.支付接口必须信息正确只能装一次5.在线充值默认的充值比例是1:1【搭建教程】1.把源码上传主机并解压2.绑定根目录和域名并解析3.访问你的域名即可提示安装4.后台登陆地址:你的域名/admin5.登陆后台安装你的支付接口(需要的话)6.码支付怎么使用方法百度一下!网盘下载地址:http
探索高效文档转换新路径:Aspose.Words v18.7助力Word无缝变PDF
邴卉露Robust
探索高效文档转换新路径:Aspose.Wordsv18.7助力Word无缝变PDF【下载地址】Aspose.Wordsv18.7C示例源码Word转PDF无需安装Office本仓库提供了一个使用Aspose.Wordsv18.7将Word文档转换为PDF文档的C#示例源码。Aspose.Words是一个强大的.NET控件,允许开发者在不安装MicrosoftOffice的情况下读写Word文档,并
qt报错说no suitable kits found
看起来你的QtCreator在试图找一个"kit"来编译你的程序,但是没有找到合适的kit.Kit是QtCreator中用来配置编译环境的一种东西,它包含了编译器、编译选项、以及所要使用的Qt库等信息.当QtCreator试图找一个kit来编译你的程序时,如果没有找到合适的kit,就会出现这个错误.要解决这个问题,你需要在QtCreator中配置一个合适的kit.具体来说,你需要安装Qt库和编译器
基于STM32设计的LCD指针式电子钟与日历项目
鱼弦
单片机系统合集 stm32 嵌入式硬件 单片机
鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于STM32设计的LCD指针式电子钟与日历项目1.介绍基于STM32设计的LCD指针式电子钟与日历项目是一款利用STM32微控制器、LCD显示屏和指针机构实
Qt 下拉框QComboBox控件:从入门到实战
一、QComboBox核心功能解析1.核心属性属性说明当前示例场景count列表项总数统计学历下拉框中的选项数量editable是否允许用户编辑学历选择时可输入自定义学历currentText当前选中项的文本获取用户选择的"硕士"文本currentData当前选中项的附加数据获取太原对应的区号"0351"currentIndex当前选中项的索引位置(从0开始)确定"硕士"在列表中的位置2.核心方法
ubuntu qt环境下出现No suitable kits found解决方案
1.清理QtCreator缓存QtCreator会缓存项目配置、索引等数据,可能导致某些异常。清理方法:(1)删除QtCreator配置目录bashrm-rf~/.config/QtProject/(Ubuntu/Linux)或Windows:cmdrmdir/s/q"%APPDATA%\QtProject"(2)清除QtCreator的编译缓存bashrm-rf~/.cache/QtProjec
RCLAMP0512TQTCT 升特半导体 TVS二极管 12通道全防护芯片 以太网/PLC控制/5G基站专用
RCLAMP0512TQTCTSemtech:12通道全防护TVS阵列一、产品简介RCLAMP0512TQTCT是Semtech最新推出的12通道超低电容TVS二极管阵列,专为工业以太网、PLC控制、5G基站等高干扰环境设计!凭借0.4pF超低电容+30kV浪涌防护能力,成为严苛环境下的"电路防弹衣"!二、六大核心优势军工级防护标准30kV/10kA浪涌防护(IEC61000-4-5Level4)
我的“自画像”
爱妮_a2ce
四年五班陈希大家好,我的名字叫陈希,我是一名女生,我有一点点胖,戴着一副眼镜,长着长长的头发,长得一般般。我有时在学校,不怎么和同学玩,比如我的好朋友闫诺找我出去玩,我也不怎么去,我不怎么和同学说话,我刚上学的时候,和我的同学都不认识,所以我们很少和对方说话,我也很少和他们玩,我们的第一课体育,玩得很开心,通过后天的了解,我们就熟悉了,但也很少聊天。我的性格比较内向。我的爱好是音乐,我的爱好是弹吉
周传雄《黄昏》 音乐里的故事62 2023-06-10
彭求实
周传雄《黄昏》音乐里的故事62黄昏周传雄创作《黄昏》背后的故事:https://www.ixigua.com/6930929836336775691周传雄《黄昏》:https://tv.360kan.com/player?id=18d2e0be282c27331a952140153530e7&q=%E5%91%A8%E4%BC%A0%E9%9B%84%E9%BB%84%E6%98%8F&src=m
Coze Studio 架构拆解:AI Agent 开发平台项目结构全分析
代码简单说
2025开发必备(限时特惠) 架构 人工智能 Coze Studio 架构 AI Agent 开发平台 全栈 AI 工程化 图解架构
CozeStudio架构拆解:AIAgent开发平台项目结构全分析标签:CozeStudio项目架构、领域驱动设计DDD、全栈开发规范、Hertz框架、前后端协作、云原生容器、前端测试、IDL接口设计、微服务解耦、AI开发平台源码分析在最近研究AIAgent开发平台的过程中,我深入分析了刚刚开源的CozeStudio项目。这套系统是国内少有的开源全栈AI工程化项目,代码整洁、架构先进,特别是它基于
古都长安6⃣️——大雁塔
飘雪儿5
7月4日下午,从陕西历史博物馆出来,打车至大雁塔。其实只有一点点路。彼时,长安的天空湛蓝,云朵洁白,阳光灿烂。虽说是夏日,由于这里气候干燥,倒也不显得闷热。司机把我们放在了北广场,即音乐广场。谁知我们只看到了大雁塔的背面。我不死心,一定要找到正面。于是一直往南走,终于看到了正门,终于看到了玄奘法师的雕像。玄奘大师身披袈裟,面容和蔼,右手持杖,左手合十,立于南面的广场上,位置就在大雁塔的正前方。此时
Qt技术面试问题总结
查理_Erik
qt 面试 开发语言
1.你知道什么是双指针吗,有没有在项目上用过,什么情况下使用双指针?答:就是两级指针,一级指针指向对象的地址,两级指针指向一级指针的地址,一般用于指针的传参,链表操作,两维数组。2.假设我在一个函数外定义了一个空指针,把它作为形参传入到函数中,我在函数中使用这个指针new了一个内存,请问这段运行这段代码会出现什么后果?那我应该如何传入一个空指针形参进函数并正确new一个内存呢?答:使用二级指针,或
Qt 5.15.3 源码编译行动~ Action
键盘会跳舞
Qt 高级使用技巧 c++ qt 源码编译 5.15.3
作为一个“与时俱进”的Qt开发者来说,编译Qt源码似乎变成了一个必不可少的技能~早前,在嵌入式设备中,我们为了减少发布的应用程序大小,往往会对Qt的模块进行裁剪,同时常常采用Qt静态编译的方式,将应用依赖的Qt静态库链接到应用程序,往往一个包含GUI的应用程序,在20M左右就可以完整的打包发布,对于现在一些应用动不动就好几百M来说,这种方式还是比较有利于应用的推广和发布的。笔者写这篇博文时,Qt6
《靠近我,温暖你》系列故事 41:借口
弦子老师家庭教育
蹑手蹑脚,我挪到女儿房间门口。悄悄打开门。探头一看,女儿正在书桌前写作业。本想再悄悄关上门,不料,却被女儿看到了。“干什么?”女儿不解地问。“喝水吗?”我赶紧面带微笑,努力表现得“真诚而又殷勤”。“不喝。”关上门,我庆幸不已。幸好,没有被女儿识破。几分钟前,我一直希望看到女儿的状态。明天就要月考了,已经7:30了,女儿开始学习了吗?是不是还在玩手机,听音乐呢?终于,我还是按捺不住,打开门,女儿的表
萧
曹海英河南许昌襄城宁庄中心小学
图片发自App我们期盼了一星期的阳光音乐到来了,孩子们收拾好东西,就坐到位子上等着上课。看到别的学校孩子们精彩的瞬间,开心的喊着,叫着:真好;并且也能读出了优秀老师的名字。到了优秀学校,又看到了我们的学校,又拍手又喊叫:“老师,老师,有我们,有我们!”并开心的鼓掌。图片发自App图片发自App到了开始上课时,眼睛目不转晴的看着屏幕,屏幕里严冬梅老师给孩子们介绍了一种新乐器,《萧》。严老师还教孩子们
如何在Windows环境下编译QT-5.15.17版本
最近在开发一款客户端软件,基于QT实现跨平台。网上能下载的安装版本只有比较老的V5.15.2版本,就想着自己去编译一个最新的QT版本。目前线上能下载的Qt5的最新版本是V5.15.17。原本以为应该比较简单,哪知道花了2天的时间才真正编译成功,经历了几次编译半天最后失败的无奈。我的笔记本配置不高,每次编译基本上要6小时以上。最坑的是编译了好几个小时,快最后了,突然报错了。现在把我编译的过程分享出来
Qt 5.15.x + VS的源码编译
黃建榮
Qt About qt c++
环境依赖MVSC,Python,Ruby,Perl需要安装的一些工具第一次编译configure的相关命令configure.bat-prefixE:\qt\qt5\install\-opensource-confirm-license\-qt-sqlite-qt-pcre-qt-zlib\-qt-libpng-qt-libjpeg-qt-freetype-qt-harfbuzz\-skipqtw
微信开发者验证接口开发
362217990
微信 开发者 token 验证
微信开发者接口验证。
Token,自己随便定义,与微信填写一致就可以了。
根据微信接入指南描述 http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html
第一步:填写服务器配置
第二步:验证服务器地址的有效性
第三步:依据接口文档实现业务逻辑
这里主要讲第二步验证服务器有效性。
建一个
一个小编程题-类似约瑟夫环问题
BrokenDreams
编程
今天群友出了一题:
一个数列,把第一个元素删除,然后把第二个元素放到数列的最后,依次操作下去,直到把数列中所有的数都删除,要求依次打印出这个过程中删除的数。
&
linux复习笔记之bash shell (5) 关于减号-的作用
eksliang
linux关于减号“-”的含义 linux关于减号“-”的用途 linux关于“-”的含义 linux关于减号的含义
转载请出自出处:
http://eksliang.iteye.com/blog/2105677
管道命令在bash的连续处理程序中是相当重要的,尤其在使用到前一个命令的studout(标准输出)作为这次的stdin(标准输入)时,就显得太重要了,某些命令需要用到文件名,例如上篇文档的的切割命令(split)、还有
Unix(3)
18289753290
unix ksh
1)若该变量需要在其他子进程执行,则可用"$变量名称"或${变量}累加内容
什么是子进程?在我目前这个shell情况下,去打开一个新的shell,新的那个shell就是子进程。一般状态下,父进程的自定义变量是无法在子进程内使用的,但通过export将变量变成环境变量后就能够在子进程里面应用了。
2)条件判断: &&代表and ||代表or&nbs
关于ListView中性能优化中图片加载问题
酷的飞上天空
ListView
ListView的性能优化网上很多信息,但是涉及到异步加载图片问题就会出现问题。
具体参看上篇文章http://314858770.iteye.com/admin/blogs/1217594
如果每次都重新inflate一个新的View出来肯定会造成性能损失严重,可能会出现listview滚动是很卡的情况,还会出现内存溢出。
现在想出一个方法就是每次都添加一个标识,然后设置图
德国总理默多克:给国人的一堂“震撼教育”课
永夜-极光
教育
http://bbs.voc.com.cn/topic-2443617-1-1.html德国总理默多克:给国人的一堂“震撼教育”课
安吉拉—默克尔,一位经历过社会主义的东德人,她利用自己的博客,发表一番来华前的谈话,该说的话,都在上面说了,全世界想看想传播——去看看默克尔总理的博客吧!
德国总理默克尔以她的低调、朴素、谦和、平易近人等品格给国人留下了深刻印象。她以实际行动为中国人上了一堂
关于Java继承的一个小问题。。。
随便小屋
java
今天看Java 编程思想的时候遇见一个问题,运行的结果和自己想想的完全不一样。先把代码贴出来!
//CanFight接口
interface Canfight {
void fight();
}
//ActionCharacter类
class ActionCharacter {
public void fight() {
System.out.pr
23种基本的设计模式
aijuans
设计模式
Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Builder:将一个复杂对象的构建与它的表示分离,使得同
《周鸿祎自述:我的互联网方法论》读书笔记
aoyouzi
读书笔记
从用户的角度来看,能解决问题的产品才是好产品,能方便/快速地解决问题的产品,就是一流产品.
商业模式不是赚钱模式
一款产品免费获得海量用户后,它的边际成本趋于0,然后再通过广告或者增值服务的方式赚钱,实际上就是创造了新的价值链.
商业模式的基础是用户,木有用户,任何商业模式都是浮云.商业模式的核心是产品,本质是通过产品为用户创造价值.
商业模式还包括寻找需求
JavaScript动态改变样式访问技术
百合不是茶
JavaScript style属性 ClassName属性
一:style属性
格式:
HTML元素.style.样式属性="值";
创建菜单:在html标签中创建 或者 在head标签中用数组创建
<html>
<head>
<title>style改变样式</title>
</head>
&l
jQuery的deferred对象详解
bijian1013
jquery deferred对象
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本。
每个版本都会引入一些新功能,从jQuery 1.5.0版本开始引入的一个新功能----deferred对象。
&nb
淘宝开放平台TOP
Bill_chen
C++ c 物流 C#
淘宝网开放平台首页:http://open.taobao.com/
淘宝开放平台是淘宝TOP团队的产品,TOP即TaoBao Open Platform,
是淘宝合作伙伴开发、发布、交易其服务的平台。
支撑TOP的三条主线为:
1.开放数据和业务流程
* 以API数据形式开放商品、交易、物流等业务;
&
【大型网站架构一】大型网站架构概述
bit1129
网站架构
大型互联网特点
面对海量用户、海量数据
大型互联网架构的关键指标
高并发
高性能
高可用
高可扩展性
线性伸缩性
安全性
大型互联网技术要点
前端优化
CDN缓存
反向代理
KV缓存
消息系统
分布式存储
NoSQL数据库
搜索
监控
安全
想到的问题:
1.对于订单系统这种事务型系统,如
eclipse插件hibernate tools安装
白糖_
Hibernate
eclipse helios(3.6)版
1.启动eclipse 2.选择 Help > Install New Software...> 3.添加如下地址:
http://download.jboss.org/jbosstools/updates/stable/helios/ 4.选择性安装:hibernate tools在All Jboss tool
Jquery easyui Form表单提交注意事项
bozch
jquery easyui
jquery easyui对表单的提交进行了封装,提交的方式采用的是ajax的方式,在开发的时候应该注意的事项如下:
1、在定义form标签的时候,要将method属性设置成post或者get,特别是进行大字段的文本信息提交的时候,要将method设置成post方式提交,否则页面会抛出跨域访问等异常。所以这个要
Trie tree(字典树)的Java实现及其应用-统计以某字符串为前缀的单词的数量
bylijinnan
java实现
import java.util.LinkedList;
public class CaseInsensitiveTrie {
/**
字典树的Java实现。实现了插入、查询以及深度优先遍历。
Trie tree's java implementation.(Insert,Search,DFS)
Problem Description
Igna
html css 鼠标形状样式汇总
chenbowen00
html css
css鼠标手型cursor中hand与pointer
Example:CSS鼠标手型效果 <a href="#" style="cursor:hand">CSS鼠标手型效果</a><br/>
Example:CSS鼠标手型效果 <a href="#" style=&qu
[IT与投资]IT投资的几个原则
comsci
it
无论是想在电商,软件,硬件还是互联网领域投资,都需要大量资金,虽然各个国家政府在媒体上都给予大家承诺,既要让市场的流动性宽松,又要保持经济的高速增长....但是,事实上,整个市场和社会对于真正的资金投入是非常渴望的,也就是说,表面上看起来,市场很活跃,但是投入的资金并不是很充足的......
 
oracle with语句详解
daizj
oracle with with as
oracle with语句详解 转
在oracle中,select 查询语句,可以使用with,就是一个子查询,oracle 会把子查询的结果放到临时表中,可以反复使用
例子:注意,这是sql语句,不是pl/sql语句, 可以直接放到jdbc执行的
----------------------------------------------------------------
hbase的简单操作
deng520159
数据库 hbase
近期公司用hbase来存储日志,然后再来分析 ,把hbase开发经常要用的命令找了出来.
用ssh登陆安装hbase那台linux后
用hbase shell进行hbase命令控制台!
表的管理
1)查看有哪些表
hbase(main)> list
2)创建表
# 语法:create <table>, {NAME => <family&g
C语言scanf继续学习、算术运算符学习和逻辑运算符
dcj3sjt126com
c
/*
2013年3月11日20:37:32
地点:北京潘家园
功能:完成用户格式化输入多个值
目的:学习scanf函数的使用
*/
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("please input three number:\n"); //提示用
2015越来越好
dcj3sjt126com
歌曲
越来越好
房子大了电话小了 感觉越来越好
假期多了收入高了 工作越来越好
商品精了价格活了 心情越来越好
天更蓝了水更清了 环境越来越好
活得有奔头人会步步高
想做到你要努力去做到
幸福的笑容天天挂眉梢 越来越好
婆媳和了家庭暖了 生活越来越好
孩子高了懂事多了 学习越来越好
朋友多了心相通了 大家越来越好
道路宽了心气顺了 日子越来越好
活的有精神人就不显
java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Tim
feiteyizu
mysql
数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00”
程序使用select 语句从中取数据时出现以下异常:
java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
java.sql.SQLException: Valu
Ehcache(07)——Ehcache对并发的支持
234390216
并发 ehcache 锁 ReadLock WriteLock
Ehcache对并发的支持
在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素Key的Read(读)、Write(写)锁。当一个线程获取了某一Key的Read锁之后,其它线程获取针对于同
mysql中blob,text字段的合成索引
jackyrong
mysql
在mysql中,原来有一个叫合成索引的,可以提高blob,text字段的效率性能,
但只能用在精确查询,核心是增加一个列,然后可以用md5进行散列,用散列值查找
则速度快
比如:
create table abc(id varchar(10),context blog,hash_value varchar(40));
insert into abc(1,rep
逻辑运算与移位运算
latty
位运算 逻辑运算
源码:正数的补码与原码相同例+7 源码:00000111 补码 :00000111 (用8位二进制表示一个数)
负数的补码:
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 -7 源码: 10000111 ,其绝对值为00000111 取反加一:11111001 为-7补码
已知一个数的补码,求原码的操作分两种情况:
利用XSD 验证XML文件
newerdragon
java xml xsd
XSD文件 (XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 具体使用方法和定义请参看:
http://www.w3school.com.cn/schema/index.asp
java自jdk1.5以上新增了SchemaFactory类 可以实现对XSD验证的支持,使用起来也很方便。
以下代码可用在J
搭建 CentOS 6 服务器(12) - Samba
rensanning
centos
(1)安装
# yum -y install samba
Installed:
samba.i686 0:3.6.9-169.el6_5
# pdbedit -a rensn
new password:123456
retype new password:123456
……
(2)Home文件夹
# mkdir /etc
Learn Nodejs 01
toknowme
nodejs
(1)下载nodejs
https://nodejs.org/download/ 选择相应的版本进行下载 (2)安装nodejs 安装的方式比较多,请baidu下
我这边下载的是“node-v0.12.7-linux-x64.tar.gz”这个版本 (1)上传服务器 (2)解压 tar -zxvf node-v0.12.
jquery控制自动刷新的代码举例
xp9802
jquery
1、html内容部分 复制代码代码示例: <div id='log_reload'>
<select name="id_s" size="1">
<option value='2'>-2s-</option>
<option value='3'>-3s-</option