添加音频采集

master
zcy 2023-12-11 01:02:28 +08:00
parent cf02c1cb4b
commit 5b71b2f12f
72 changed files with 2947 additions and 140 deletions

View File

@ -34,6 +34,9 @@ int main(int argc, char *argv[])
ScreenCapture p;
p.EnumScreen();
SYSTEMTIME st;
GetSystemTime(&st);
Direct3D9TakeScreenshots(0,4);
QssEventFilter filter;
QApplication app(argc, argv);

View File

@ -38,7 +38,8 @@ MainWindow::MainWindow(QWidget *parent) :
qDebug()<<"capture "<<mMic.size()<<"mic";
for(vector<CaptureAudioFfmpeg::MICInfo>::iterator itr = mMic.begin();itr != mMic.end();itr++){
qDebug()<<QString::fromStdWString(itr->name)<<itr->index;
ui->comboBox_2->addItem(QString::fromWCharArray(itr->name.c_str(),itr->name.size()),
QString::fromWCharArray(itr->name.c_str(),itr->name.size()));
}
mTimer = new QTimer(this);
@ -57,7 +58,6 @@ void MainWindow::on_pushButton_clicked(){
}
if(!m_bCameraOpen){
mPlayerWidget->SetDataType(CPlayWidget::IMG_TYPE::TYPE_RGB32);
mPlayerWidget->SetImgSize(640,480);
qDebug()<<ui->comboBox->currentText().size()<<ui->comboBox->currentText();
wchar_t *opencamera = new wchar_t[ui->comboBox->currentText().size()];
@ -66,6 +66,9 @@ void MainWindow::on_pushButton_clicked(){
if(nullptr == mCamera){
this->mCamera = new Camera(ss);
}
GUIDToAvFormat(mCamera->MediaType());
mPlayerWidget->SetImgSize(mCamera->GetWidth(),mCamera->GetHeight());
this->mCamera->SetObserver(mPlayerWidget);
qDebug()<<ui->comboBox->currentText();
ui->pushButton->setText("关闭摄像头");
@ -104,7 +107,7 @@ void MainWindow::on_pushButton_2_clicked()
if (!mPusher->IfConnect()) {
const char* address = ui->lineEdit->text().toLocal8Bit().data();
qDebug()<<address;
if (0 == mPusher->RTMP264_Connect("rtmp://hyrtc.net:2530/live/123")) {
if (0 == mPusher->RTMP264_Connect("rtmp://127.0.0.1:1935/live/1")) {
ToastWidget::showTip("已经连接上RTMP服务器",this->parentWidget());
mVideoCoder->SetOberver(mPusher);
mPusher->StartPush();
@ -128,6 +131,12 @@ void MainWindow::on_pushButton_2_clicked()
void MainWindow::on_pushButton_3_clicked()
{
qDebug()<<ui->comboBox_2->currentText();
wchar_t ptr[200];
ui->comboBox_2->currentText().toWCharArray(ptr);
mAudioCapture->InitCapture(ptr,4800,2);
}
void MainWindow::DetectDpi()

View File

@ -305,7 +305,6 @@ bool Camera::Open(std::wstring &camera_name)
}
mediaType.formattype = FORMAT_VideoInfo;
hr = mSampGrabber->SetMediaType(&mediaType);
// 意味着最后的数据是丢掉的
CHECK_HR(CoCreateInstance(CLSID_NullRenderer, nullptr, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)(&dest_filter)));
mGraphBuilder->AddFilter(dest_filter, L"nullptrRenderer");
@ -415,6 +414,9 @@ HRESULT STDMETHODCALLTYPE Camera::SampleGrabberCallback::BufferCB(double Time, B
fwrite(pBuffer,BufferLen,1,p);
fflush(p);
#endif
if(0 == pBuffer){
return -1;
}
if (mObserver.size() > 0) {

View File

@ -1,4 +1,5 @@
#include "RtmpPusher.h"
#include <sys/timeb.h>
/**
* winsock
@ -126,6 +127,9 @@ int RtmpPusher::SendPacket(unsigned int nPacketType, unsigned char * data,
int RtmpPusher::SendVideoPacket(unsigned int nPacketType,
unsigned char * data, unsigned int size, unsigned int nTimestamp)
{
SYSTEMTIME st;
GetSystemTime(&st);
qDebug()<<QString::asprintf("send tps%ld\n", st.wMilliseconds);
RTMPPacket* packet;
/*分配包内存和初始化,len为包体长度*/
@ -210,8 +214,16 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
uint32_t size = 0;
static uint32_t time = 0;
SYSTEMTIME st;
GetSystemTime(&st);
struct timeb t1;
ftime(&t1);
//t1.time是从UTC时间1970年1月1日午夜(00:00:00)起累计的秒数t1.millitm是一秒内的毫秒数
time_t ttt= t1.millitm+t1.time*1000;
// qDebug()<<QString::asprintf("send tps%ld \n",ttt);
if(0 == mStartTime){
mStartTime = RTMP_GetTime();
mStartTime = ttt;
}
if (nullptr == data) {
return -1;
@ -223,12 +235,12 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
&& ((data[i + 2] == 0x00) && (data[i + 3] == 0x01) || (data[i + 2] == 0x01))) {
if ((nalhead == nullptr) && (i == 0) ) {
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x41)) { //p 帧直接发
time += 100;
time += 60;
nalhead = data;
naltail = data + (len);
size = naltail - nalhead;
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
return 0;
}
//sps 帧进行解包
@ -244,22 +256,22 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
else {
// i frame
if ((data[i + 2] == 0x01) && (data[i + 3] == 0x65)) {
time += 100;
time += 60;
naltail = data + i;
size = naltail - nalhead;
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
nalhead = data + i;
naltail = data + (len);
size = naltail - nalhead;
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
return 0;
}
//pps
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x68)) { // sps or pps or sei
naltail = data + i;
size = naltail - nalhead;
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
nalhead = data + i;
i += 3;
}//sps
@ -271,7 +283,7 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x06)) { // sps or pps or sei
naltail = data + i;
size = naltail - nalhead;
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
nalhead = data + i;
i += 3;
}
@ -528,6 +540,7 @@ void H264RtmpPuser::ProcessSend()
{
while (this->mIfStart) {
int len = mPack.size();
qDebug()<<"unsend size"<<len;
if (!mPack.empty()) {
mMux.lock();
Buffer buf = mPack.front();
@ -543,7 +556,7 @@ void H264RtmpPuser::ProcessSend()
}
free(buf.buf);
}
msleep(10);
msleep(5);
}
}

View File

@ -25,6 +25,9 @@ extern "C" {
#include <queue>
#include<iostream>
#include <string>
#include <QDebug>
#include <QString>
using namespace std;
#define RTMP_HEAD_SIZE (sizeof(RTMPPacket)+RTMP_MAX_HEADER_SIZE)

View File

@ -20,6 +20,181 @@ int VideoCoder::SetDestPix(uint8_t width, uint8_t height) {
return 0;
}
///
/// @brief 垂直翻转RGB数据
/// @param[in] width - RGB图像宽度
/// @param[in] height - RGB图像高度
/// @param[in] rgbData - RGB图像数据指针
/// @param[in] bitsPerPixel - 每一个像素的字节大小通常为rgbData的长度/width*height
///
int VideoCoder::Filter(int in_width, int in_height, unsigned char* rgbData, int bitsPerPixel)
{
//1.注册过滤器
avfilter_register_all();
//2.创建一个过滤器图层,管理所有过滤器
AVFilterGraph* filter_graph = avfilter_graph_alloc();
if (!filter_graph) {
printf("Fail to create filter graph!\n");
return -1;
}
//3.获取一个用于AVFilterGraph输入的过滤器
// source filter源头过滤器过滤器参数 一般为图像格式信息
char args[512];
sprintf(args,
"video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
in_width, in_height, AV_PIX_FMT_YUV420P, 1, 25, 1, 1);
//bufferSrc->description = Buffer video frames, and make them accessible to the filterchain.
const AVFilter* bufferSrc = avfilter_get_by_name("buffer"); // AVFilterGraph的输入源
AVFilterContext* bufferSrc_ctx;
int ret = avfilter_graph_create_filter(&bufferSrc_ctx, bufferSrc, "in", args, NULL, filter_graph);
if (ret < 0) {
printf("Fail to create filter bufferSrc\n");
return -1;
}
//4.获取一个用于AVFilterGraph输出的过滤器
// sink filter
AVBufferSinkParams *bufferSink_params;
AVFilterContext* bufferSink_ctx;
const AVFilter* bufferSink = avfilter_get_by_name("buffersink");
enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE };
bufferSink_params = av_buffersink_params_alloc();
bufferSink_params->pixel_fmts = pix_fmts;
ret = avfilter_graph_create_filter(&bufferSink_ctx, bufferSink, "out", NULL,
bufferSink_params, filter_graph);
if (ret < 0) {
printf("Fail to create filter sink filter\n");
return -1;
}
//5. split filter用于分流outputs=2表示输出两股流
const AVFilter *splitFilter = avfilter_get_by_name("split");
AVFilterContext *splitFilter_ctx;
ret = avfilter_graph_create_filter(&splitFilter_ctx, splitFilter, "split", "outputs=2",
NULL, filter_graph);
if (ret < 0) {
printf("Fail to create split filter\n");
return -1;
}
//6. crop filter裁剪out_w=iw:out_h=ih/2:x=0:y=0表示裁剪得到的区域
const AVFilter *cropFilter = avfilter_get_by_name("crop");
AVFilterContext *cropFilter_ctx;
ret = avfilter_graph_create_filter(&cropFilter_ctx, cropFilter, "crop",
"out_w=iw:out_h=ih/2:x=0:y=0", NULL, filter_graph);
if (ret < 0) {
printf("Fail to create crop filter\n");
return -1;
}
//7. vflip filter垂直翻转从上到下==》最终合成的位置由overlay过滤器设置经确认是将裁剪的区域翻转后拼接到图像下半部分
//图像上半部分不变不变是因为split分割出了两路流过滤器是操作的辅助流
//配合使用cropout_w=iw:out_h=ih/2:x=0:y=ih/2进行验证
const AVFilter *vflipFilter = avfilter_get_by_name("vflip");
AVFilterContext *vflipFilter_ctx;
ret = avfilter_graph_create_filter(&vflipFilter_ctx, vflipFilter, "vflip", NULL, NULL, filter_graph);
if (ret < 0) {
printf("Fail to create vflip filter\n");
return -1;
}
//8. overlay filter视频合成
const AVFilter *overlayFilter = avfilter_get_by_name("overlay");
AVFilterContext *overlayFilter_ctx;
ret = avfilter_graph_create_filter(&overlayFilter_ctx, overlayFilter, "overlay",
"y=0:H/2", NULL, filter_graph);
if (ret < 0) {
printf("Fail to create overlay filter\n");
return -1;
}
// split用于分流
// crop确定裁剪位置
// vflip仅翻转图像
// overlay确定视频叠加位置
// [main]
//input ----> split ---------------------> overlay --> output
// | ^
// |[tmp] [flip]|
// | |
// v |
// +-----> crop --> vflip -------+
//9.过滤器连接
// src filter to split filter
ret = avfilter_link(bufferSrc_ctx, 0, splitFilter_ctx, 0);
if (ret != 0) {
printf("Fail to link src filter and split filter\n");
return -1;
}
// split filter's first pad to overlay filter's main pad
ret = avfilter_link(splitFilter_ctx, 0, overlayFilter_ctx, 0);
if (ret != 0) {
printf("Fail to link split filter and overlay filter main pad\n");
return -1;
}
// split filter's second pad to crop filter
ret = avfilter_link(splitFilter_ctx, 1, cropFilter_ctx, 0);
if (ret != 0) {
printf("Fail to link split filter's second pad and crop filter\n");
return -1;
}
// crop filter to vflip filter
ret = avfilter_link(cropFilter_ctx, 0, vflipFilter_ctx, 0);
if (ret != 0) {
printf("Fail to link crop filter and vflip filter\n");
return -1;
}
// vflip filter to overlay filter's second pad
ret = avfilter_link(vflipFilter_ctx, 0, overlayFilter_ctx, 1);
if (ret != 0) {
printf("Fail to link vflip filter and overlay filter's second pad\n");
return -1;
}
// overlay filter to sink filter
ret = avfilter_link(overlayFilter_ctx, 0, bufferSink_ctx, 0);
if (ret != 0) {
printf("Fail to link overlay filter and sink filter\n");
return -1;
}
//10. check filter graph
ret = avfilter_graph_config(filter_graph, NULL);
if (ret < 0) {
printf("Fail in filter graph\n");
return -1;
}
//11.打印filtergraph具体情况
char *graph_str = avfilter_graph_dump(filter_graph, NULL);
FILE* graphFile = NULL;
fopen_s(&graphFile, "graphFile.txt", "w"); // 打印filtergraph的具体情况
fprintf(graphFile, "%s", graph_str);
av_free(graph_str);
//数据处理,按帧处理
AVFrame *frame_in = av_frame_alloc();
unsigned char *frame_buffer_in = (unsigned char *)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));
av_image_fill_arrays(frame_in->data, frame_in->linesize, frame_buffer_in,
AV_PIX_FMT_YUV420P, in_width, in_height, 1);
AVFrame *frame_out = av_frame_alloc();
unsigned char *frame_buffer_out = (unsigned char *)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));
av_image_fill_arrays(frame_out->data, frame_out->linesize, frame_buffer_out,
AV_PIX_FMT_YUV420P, in_width, in_height, 1);
frame_in->width = in_width;
frame_in->height = in_height;
frame_in->format = AV_PIX_FMT_YUV420P;
uint32_t frame_count = 0;
}
VideoCoder::VideoCoder(int width, int height, AVPixelFormat formt):
mObserver(nullptr),
mFrame(nullptr),
@ -54,15 +229,15 @@ VideoCoder::VideoCoder(int width, int height, AVPixelFormat formt):
mCodecCtx->bit_rate = 1000;
this->mDestHeight = 480;
this->mDestWidth = 640;
mCodecCtx->width = this->mDestWidth;
mCodecCtx->height = this->mDestHeight;
mCodecCtx->width = this->mDestWidth;
mCodecCtx->height = this->mDestHeight;
mCodecCtx->time_base.num = 1;
mCodecCtx->time_base.den = 10;
mCodecCtx->max_b_frames = 0;
mCodecCtx->qmin = 10;
mCodecCtx->qmax = 25;
//mCodecCtx->flags |= AV_CODEC_FLAG_LOW_DELAY;
mCodecCtx->gop_size = 10;
mCodecCtx->gop_size = 25;
mCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
av_opt_set(mCodecCtx->priv_data, "preset", "superfast", 0);
av_opt_set(mCodecCtx->priv_data, "tune", "zerolatency", 0);
@ -128,8 +303,8 @@ void VideoCoder::Encode(uint8_t * src, int size, enum AVPixelFormat format) {
ret = avcodec_encode_video2(mCodecCtx, &mAVPack, mFrame, &got_picture);
if (got_picture > 0) {
fwrite(mAVPack.data, 1, mAVPack.size, p);
fflush(p);
// fwrite(mAVPack.data, 1, mAVPack.size, p);
// fflush(p);
if(nullptr != this->mObserver)
this->mObserver->OnGetCodeFrame(mAVPack.data, mAVPack.size);
}
@ -138,9 +313,10 @@ void VideoCoder::Encode(uint8_t * src, int size, enum AVPixelFormat format) {
// 刷新coder防止包挤压
av_packet_unref(&mAVPack);
av_freep(&pFrame[0]);
av_freep(&pFrame[0]);
free(pFrame[0]);
//av_freep(&mFrame->data[0]);
//av_freep(&mFrame->data[0]);
//av_freep(&mFrame->data[0]);
}

View File

@ -11,7 +11,12 @@ extern "C"
#include "libswscale/swscale.h"
#include "libavutil/opt.h"
#include "libavutil/imgutils.h"
};
#include <libavfilter/avfilter.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/opt.h>
}
#include <iostream>
#else
#ifdef __cplusplus
@ -60,7 +65,9 @@ public:
void Encode(uint8_t*src,int size, enum AVPixelFormat format);
void SetOberver(VideoCodeObserver *p) {
this->mObserver = p;
}
}
int Filter(int width, int height, unsigned char* rgbData, int bitsPerPixel);
void SetOutPutPixel(unsigned int width,unsigned int height);
private:
int flushCoder(AVFormatContext *fmt_ctx, unsigned int stream_index);

View File

@ -1,4 +1,7 @@
#include "audiocaptureff.h"
#include "audiocaptureff.h"
#include <QByteArray>
#include <Qdebug>
#include <QTextCodec>
#ifdef __MINGW32__
std::string WString2String(const std::wstring& ws)
@ -16,6 +19,12 @@ std::string WString2String(const std::wstring& ws)
}
#endif
int ThreadCapture(CaptureAudioFfmpeg*p){
return 0;
}
vector<CaptureAudioFfmpeg::MICInfo> CaptureAudioFfmpeg::EnumSpeakers()
{
vector<CaptureAudioFfmpeg::MICInfo> ret;
@ -85,6 +94,8 @@ CaptureAudioFfmpeg::CaptureAudioFfmpeg(uint16_t rate, uint8_t channel)
{
mSampleRate = rate;
mChanel = channel;
mStatus = STOP;
mThread = nullptr;
}
@ -99,118 +110,131 @@ static char *dup_wchar_to_utf8(wchar_t *w)
return s;
}
int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
{
string fileAudioInput = dup_wchar_to_utf8((wchar_t *)url.c_str());
AVInputFormat* imft = av_find_input_format("dshow");
av_register_all();
avdevice_register_all();
wchar_t w[200] = L"audio=耳机 (TimeBox-Evo-audio)";
string fileAudioInput = dup_wchar_to_utf8(w);
static AVInputFormat* imft = av_find_input_format("dshow");
AVDictionary *format_opts = nullptr;
av_dict_set_int(&format_opts, "audio_buffer_size", 20, 0);
if (0 > avformat_open_input(&mInfmt_ctx, fileAudioInput.c_str(), imft, &format_opts)) {
printf("failed input file\n");
int ret = avformat_open_input(&mInfmt_ctx,fileAudioInput.c_str(), imft, &format_opts);
if (0 > ret) {
printf("failed input file %d\n",ret);
char buf[1024];
av_strerror(ret, buf, 1024);
printf("Couldn't open file %d(%s)\n", ret, buf);
return -1;
}
if (0 > avformat_find_stream_info(mInfmt_ctx, NULL)) {
if (0 > avformat_find_stream_info(mInfmt_ctx, &format_opts)) {
printf("failed find stream info\n");
avformat_close_input(&mInfmt_ctx);
return -1;
}
int audio_index = -1;
audio_index = av_find_best_stream(mInfmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
if (-1 == audio_index) {
printf("failed find best stream\n");
avformat_close_input(&mInfmt_ctx);
return -1;
}
//av_dump_format(infmt_ctx, 0, fileAudioInput.c_str(), 1);
//END输入文件
int audio_index = -1;
audio_index = av_find_best_stream(mInfmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
if (-1 == audio_index) {
printf("failed find best stream\n");
avformat_close_input(&mInfmt_ctx);
return -1;
}
//打开解码器
static AVCodec* decodec = avcodec_find_decoder(mInfmt_ctx->streams[0]->codec->codec_id);
if (!decodec) {
printf("failed find decoder\n");
return -1;
}
if (0 > avcodec_open2(mInfmt_ctx->streams[0]->codec, decodec, NULL)) {
printf("failed open decoder\n");
return -1;
}
//END解码器
//重采样初始化
initAudioFilters();
//END重采样初始化
//编码器
static AVCodec* codec = NULL;
//codec = avcodec_find_encoder_by_name("libmp3lame");
codec = avcodec_find_encoder(AV_CODEC_ID_AAC);
static AVCodecContext* codec_ctx = NULL;
codec_ctx = avcodec_alloc_context3(codec);
// codec_ctx->bit_rate = 64000;
// inputContext->streams[0]->codec
codec_ctx->codec = codec;
codec_ctx->sample_rate = 48000;
codec_ctx->channel_layout = 3;
codec_ctx->channels = 2;
//codec_ctx->frame_size = 1024;
codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
codec_ctx->codec_tag = 0;
codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
// 不需要编码器
// av_dump_format(mInfmt_ctx, 0, fileAudioInput.c_str(), 1);
//END输入文件
if (0 > avcodec_open2(codec_ctx, codec, NULL)) {
printf("failed open coder\n");
avformat_close_input(&mInfmt_ctx);
avcodec_free_context(&codec_ctx);
return -1;
}
//END编码器
//输出文件
AVFormatContext* outfmt_ctx = NULL;
if (0 > avformat_alloc_output_context2(&outfmt_ctx, NULL, NULL, "aac.aac")) {
printf("failed alloc outputcontext\n");
avformat_close_input(&mInfmt_ctx);
avcodec_free_context(&codec_ctx);
return -1;
}
AVStream* out_stream = avformat_new_stream(outfmt_ctx, codec_ctx->codec);
if (!out_stream) {
printf("failed new stream\n");
avformat_close_input(&mInfmt_ctx);
avcodec_free_context(&codec_ctx);
avformat_close_input(&outfmt_ctx);
return -1;
}
avcodec_copy_context(out_stream->codec, codec_ctx);
// if (0 > avio_open(&outfmt_ctx->pb, "rtmp://localhost/testlive", AVIO_FLAG_WRITE)) {
if (0 > avio_open(&outfmt_ctx->pb, "aac.aac", AVIO_FLAG_WRITE)) {
printf("failed to open outfile\n");
avformat_close_input(&mInfmt_ctx);
avcodec_free_context(&codec_ctx);
avformat_close_input(&outfmt_ctx);
return -1;
}
avformat_write_header(outfmt_ctx, NULL);
//END输出文件
#if 0
AVFrame* Frame = av_frame_alloc();
Frame->nb_samples = codec_ctx->frame_size;
Frame->format = codec_ctx->sample_fmt;
Frame->channel_layout = codec_ctx->channel_layout;
int size = av_samples_get_buffer_size(NULL, codec_ctx->channels, codec_ctx->frame_size,
codec_ctx->sample_fmt, 1);
uint8_t* frame_buf = (uint8_t *)av_malloc(size);
avcodec_fill_audio_frame(Frame, codec_ctx->channels, codec_ctx->sample_fmt, (const uint8_t*)frame_buf, size, 1);
int64_t in_channel_layout = av_get_default_channel_layout(codec_ctx->channels);
AVPacket pkt;
av_new_packet(&pkt, size);
pkt.data = NULL;
int got_frame = -1;
int delayedFrame = 0;
static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2];
int audioCount = 0;
const uint8_t *indata[AV_NUM_DATA_POINTERS] = { 0 };
AVFrame* Frame1 = av_frame_alloc();
#endif
int loop = 1;
int delayedFrame = 0;
// //打开解码器
// static AVCodec* decodec = avcodec_find_decoder(mInfmt_ctx->streams[0]->codec->codec_id);
// if (!decodec) {
// printf("failed find decoder\n");
// return -1;
// }
// if (0 > avcodec_open2(mInfmt_ctx->streams[0]->codec, decodec, NULL)) {
// printf("failed open decoder\n");
// return -1;
// }
// //END解码器
// //重采样初始化
// initAudioFilters();
// //END重采样初始化
// //编码器
// static AVCodec* codec = NULL;
// //codec = avcodec_find_encoder_by_name("libmp3lame");
// codec = avcodec_find_encoder(AV_CODEC_ID_AAC);
// static AVCodecContext* codec_ctx = NULL;
// codec_ctx = avcodec_alloc_context3(codec);
// // codec_ctx->bit_rate = 64000;
// // inputContext->streams[0]->codec
// codec_ctx->codec = codec;
// codec_ctx->sample_rate = 48000;
// codec_ctx->channel_layout = 3;
// codec_ctx->channels = 2;
// //codec_ctx->frame_size = 1024;
// codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
// codec_ctx->codec_tag = 0;
// codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
// if (0 > avcodec_open2(codec_ctx, codec, NULL)) {
// printf("failed open coder\n");
// avformat_close_input(&mInfmt_ctx);
// avcodec_free_context(&codec_ctx);
// return -1;
// }
// //END编码器
// //输出文件
// AVFormatContext* outfmt_ctx = NULL;
// if (0 > avformat_alloc_output_context2(&outfmt_ctx, NULL, NULL, "aac.aac")) {
// printf("failed alloc outputcontext\n");
// avformat_close_input(&mInfmt_ctx);
// avcodec_free_context(&codec_ctx);
// return -1;
// }
// AVStream* out_stream = avformat_new_stream(outfmt_ctx, codec_ctx->codec);
// if (!out_stream) {
// printf("failed new stream\n");
// avformat_close_input(&mInfmt_ctx);
// avcodec_free_context(&codec_ctx);
// avformat_close_input(&outfmt_ctx);
// return -1;
// }
// avcodec_copy_context(out_stream->codec, codec_ctx);
//// if (0 > avio_open(&outfmt_ctx->pb, "rtmp://localhost/testlive", AVIO_FLAG_WRITE)) {
// if (0 > avio_open(&outfmt_ctx->pb, "aac.aac", AVIO_FLAG_WRITE)) {
// printf("failed to open outfile\n");
// avformat_close_input(&mInfmt_ctx);
// avcodec_free_context(&codec_ctx);
// avformat_close_input(&outfmt_ctx);
// return -1;
// }
// avformat_write_header(outfmt_ctx, NULL);
// //END输出文件
// #if 0
// AVFrame* Frame = av_frame_alloc();
// Frame->nb_samples = codec_ctx->frame_size;
// Frame->format = codec_ctx->sample_fmt;
// Frame->channel_layout = codec_ctx->channel_layout;
// int size = av_samples_get_buffer_size(NULL, codec_ctx->channels, codec_ctx->frame_size,
// codec_ctx->sample_fmt, 1);
// uint8_t* frame_buf = (uint8_t *)av_malloc(size);
// avcodec_fill_audio_frame(Frame, codec_ctx->channels, codec_ctx->sample_fmt, (const uint8_t*)frame_buf, size, 1);
// int64_t in_channel_layout = av_get_default_channel_layout(codec_ctx->channels);
// AVPacket pkt;
// av_new_packet(&pkt, size);
// pkt.data = NULL;
// int got_frame = -1;
// int delayedFrame = 0;
// static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2];
// int audioCount = 0;
// const uint8_t *indata[AV_NUM_DATA_POINTERS] = { 0 };
// AVFrame* Frame1 = av_frame_alloc();
// #endif
// int loop = 1;
// int delayedFrame = 0;
AVPacket packet;
av_init_packet(&packet);
packet.data = NULL;
@ -222,12 +246,19 @@ int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
AVFrame* pSrcAudioFrame = av_frame_alloc();
int got_frame = 0;
const char *filename = "./audio.pcm";
// 文件操作
FILE *outfile = fopen(filename,"wb+");
while (1) {
av_read_frame(mInfmt_ctx, &packet);
loop++;
if (packet.stream_index == audio_index) {
auto filterFrame = DecodeAudio(&packet, pSrcAudioFrame);
int ret = av_read_frame(mInfmt_ctx, &packet);
if (ret == 0) {
qDebug()<<"recv pack"<<packet.size;
fwrite(packet.data, 1, packet.size, outfile);
fflush(outfile);
//auto filterFrame = DecodeAudio(&packet, pSrcAudioFrame);
/*
if (filterFrame) {
avcodec_encode_audio2(codec_ctx, &pkt, filterFrame, &got_frame);
if (got_frame) {
@ -250,20 +281,42 @@ int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
av_packet_unref(&pkt);
printf("no output frame\n");
}
}
} */
}
av_packet_unref(&packet);
}
flush_encoder(outfmt_ctx, 0);
av_write_trailer(outfmt_ctx);
// flush_encoder(outfmt_ctx, 0);
// av_write_trailer(outfmt_ctx);
//av_free(Frame);
av_free(pSrcAudioFrame);
avio_close(outfmt_ctx->pb);
avformat_close_input(&mInfmt_ctx);
// av_free(pSrcAudioFrame);
// avio_close(outfmt_ctx->pb);
// avformat_close_input(&mInfmt_ctx);
//avformat_close_input(&outfmt_ctx);
return 0;
}
int CaptureAudioFfmpeg::SetObserver(CaptureAudioObserver *ptr)
{
if(nullptr == ptr)
return -1;
observer = ptr;
return 0;
}
int CaptureAudioFfmpeg::StartCapture()
{
if(this->mStatus == RUNNING)
return 0;
else{
mStatus = RUNNING;
this->mThread = new std::thread(ThreadCapture,this);
mThreadId = this->mThread->get_id();
}
return 0;
}
int CaptureAudioFfmpeg::initAudioFilters()
{
char args[512];
@ -390,13 +443,16 @@ AVFrame *CaptureAudioFfmpeg::DecodeAudio(AVPacket *packet, AVFrame *pSrcAudioFra
auto length = avcodec_decode_audio4(codecContext, pSrcAudioFrame, &gotFrame, packet);
if (length >= 0 && gotFrame != 0)
{
if (av_buffersrc_add_frame_flags(mBuffersrcCtx, pSrcAudioFrame, AV_BUFFERSRC_FLAG_PUSH) < 0) {
av_log(NULL, AV_LOG_ERROR, "buffe src add frame error!\n");
int ret = av_buffersrc_add_frame_flags(mBuffersrcCtx, pSrcAudioFrame, AV_BUFFERSRC_FLAG_PUSH) ;
if (ret < 0) {
char buf[1024];
av_strerror(ret, buf, 1024);
av_log(NULL, AV_LOG_ERROR,"av_buffersrc_add_frame_flags %d(%s)\n", ret, buf);
return nullptr;
}
filtFrame = av_frame_alloc();
int ret = av_buffersink_get_frame_flags(mBuffersinkCtx, filtFrame, AV_BUFFERSINK_FLAG_NO_REQUEST);
ret = av_buffersink_get_frame_flags(mBuffersinkCtx, filtFrame, AV_BUFFERSINK_FLAG_NO_REQUEST);
if (ret < 0)
{
av_frame_free(&filtFrame);

View File

@ -51,17 +51,18 @@ public:
vector<CaptureAudioFfmpeg::MICInfo> EnumSpeakers();
CaptureAudioFfmpeg(uint16_t rate, uint8_t channel);
int InitCapture(wstring url,uint16_t rate,uint8_t channel);
int SetObserver(CaptureAudioObserver*);
int StartCapture();
std::thread::id mThreadId;
/*
~CaptureAudio();
int StartCapture();
void StopCapture();
int SetObserver(CaptureAudioObserver*);
int OnCallBack(const void* input, void* output, unsigned long frameCount);
void AddCnt(unsigned int x) {this->mSize += x;};
*/
private:
std::thread mThread;
std::thread *mThread;
uint16_t mSampleRate; //采样率
uint16_t mChanel; //通道号
uint16_t mSamplefmt;
@ -80,6 +81,9 @@ private:
int flush_encoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
AVFrame *DecodeAudio(AVPacket* packet, AVFrame*pSrcAudioFrame);
};
#endif // AUDIOCAPTUREFF_H

View File

@ -0,0 +1,8 @@

QFrame#window {
border: 1px solid black;
font-style: normal;
background: rgb(239,242,245);
}

65
qss/css/QssTitleBar.css Normal file
View File

@ -0,0 +1,65 @@
QWidget#qssTitleBar{
color: white;
background: rgb(51,101,177);
border: 0px;
margin: 0px;
}
QWidget#qssTitleBar > QPushButton#titlebaricon{
background: rgb(51,101,177);
width: 25px;
height:25px;
}
QWidget#qssTitleBar > QPushButton#titlebarclosebtn{
image: url(":/qss/icon/btn_close_down.svg");
background: rgb(51,101,177);
width: 25px;
height:25px;
margin-left: 1px;
}
QWidget#qssTitleBar >QPushButton#titlebarmaxbtn{
background: rgb(51,101,177);
width: 25px;
height:25px;
margin-left: 1px;
image: url(":/qss/icon/btn_max_normal.svg");
}
QWidget#qssTitleBar >QPushButton#titlebarclosebtn:enabled:hover{
background: red;
}
QWidget#qssTitleBar >QPushButton#titlebarminbtn{
image: url(":/qss/icon/btn_mini_down.svg");
background: rgb(51,101,177);
width: 25px;
height:25px;
margin-left: 1px;
}
QWidget#qssTitleBar >QPushButton#titlebarminbtn:enabled:hover{
background: rgb(187, 212, 238);
}
QWidget#qssTitleBar >QPushButton#titlebarrestorebtn{
image: url(":/qss/icon/btn_max_normal.svg");
background: rgb(187, 212, 238);
width: 25px;
height:25px;
margin-left: 1px;
margin-right: 2px;
}
QWidget#qssTitleBar >QPushButton#titlebarrestorebtn:enabled:hover{
background: rgb(187, 212, 238);
}
QWidget#qssTitleBar >QPushButton#btn_serial:!enabled {
background: rgb(180, 180, 180);
color: white;
}
QWidget#qssTitleBar >QPushButton#titlebarmaxbtn:enabled:hover{
background: rgb(100, 160, 220);
}
QWidget#qssTitleBar > QLabel#title{
color: white;
font-size: 13px;
font-family: monospace;
}

149
qss/css/basic.css Normal file
View File

@ -0,0 +1,149 @@

QPushButton:enabled {
background: rgb(22,155,213);
color: white;
border-radius:3px;
}
QPushButton:!enabled {
background: white;
color: black;
}
QPushButton:enabled:hover {
background: rgb(100, 160, 220);
}
QPushButton:enabled:pressed {
background: rgb(120, 170, 220);
}
QLabel{
}
/**********下拉列表**********/
QComboBox {
height: 25px;
border: 1px solid rgb(111, 156, 207);
background: white;
border-radius:3px;
}
QComboBox:enabled {
color: rgb(84, 84, 84);
}
QComboBox:!enabled {
color: rgb(80, 80, 80);
}
QComboBox:enabled:hover, QComboBox:enabled:focus {
color: rgb(51, 51, 51);
}
QComboBox::drop-down {
width: 20px;
border: none;
background: transparent;
}
QComboBox::drop-down:hover {
background: rgba(0, 0, 0, 30);
}
QComboBox::down-arrow {
image: url(:/qss/icon/combo_arrow.png);
max-height:30%;
max-width: 30%;
}
QComboBox::down-arrow:on {
top: 1px;
}
QComboBox QAbstractItemView {
border: 1px solid rgb(111, 156, 207);
background: white;
outline: none;
}
QComboBox QAbstractItemView::item {
height: 25px;
color: rgb(73, 73, 73);
}
QComboBox QAbstractItemView::item:selected {
background: rgb(232, 241, 250);
color: rgb(2, 65, 132);
}
QTabWidget{
margin-left:10;
background: rgb(239,242,245);
}
QTabWidget::pane {
border: none;
}
QTabWidget::tab-bar {
border: none;
}
QTabBar::tab {
border: none;
border-top-left-radius: 4px;
color: white;
background: rgb(239,242,245);
color: black;
height: 28px;
min-width: 85px;
margin-right: 5px;
}
QTabBar::tab:hover {
background: rgb(51,101,177);
}
QTabBar::tab:selected {
color: white;
background: rgb(51,101,177);
}
QTableView {
border: none;
}
QTableView::item {
padding-left: 5px;
padding-right: 5px;
background: white;
}
QTableView::item:selected {
border: 1px solid black;
color: rgb(65, 65, 65);
}
QTableView::item:selected:!active {
color: rgb(65, 65, 65);
}
QTableView::indicator {
border: 1px solid black;
width: 20px;
height: 20px;
}
QLineEdit {
border: 1px solid rgb(111, 156, 207);
background: white;
border-radius:3px;
}

View File

@ -0,0 +1,192 @@
QPushButton:enabled {
background: rgb(22,155,213);
color: white;
border-radius:3px;
}
QPushButton:!enabled {
background: white;
color: black;
}
QPushButton:enabled:hover {
background: rgb(100, 160, 220);
}
QPushButton:enabled:pressed {
background: rgb(120, 170, 220);
}
QPushButton#pushButton:enabled {
background: white;
color: black;
border-radius:3px;
}
QPushButton#pushButton:!enabled {
background: rgb(180, 180, 180);
color: white;
}
QPushButton#pushButton:enabled:hover{
background: rgb(100, 160, 220);
}
QPushButton#pushButton:enabled:pressed{
background: rgb(120, 170, 220);
}
QLabel{
font-size: 13px;
}
/**********ÏÂÀ­Áбí**********/
QComboBox {
height: 25px;
border: 1px solid rgb(111, 156, 207);
background: white;
border-radius:3px;
}
QComboBox:enabled {
color: rgb(84, 84, 84);
}
QComboBox:!enabled {
color: rgb(80, 80, 80);
}
QComboBox:enabled:hover, QComboBox:enabled:focus {
color: rgb(51, 51, 51);
}
QComboBox::drop-down {
width: 20px;
border: none;
background: transparent;
}
QComboBox::drop-down:hover {
background: rgba(0, 0, 0, 30);
}
QComboBox::down-arrow {
image: url(:/qss/icon/combo_arrow.png);
max-height:30%;
max-width: 30%;
}
QComboBox::down-arrow:on {
top: 1px;
}
QComboBox QAbstractItemView {
border: 1px solid rgb(111, 156, 207);
background: white;
outline: none;
}
QComboBox QAbstractItemView::item {
height: 25px;
color: rgb(73, 73, 73);
}
QComboBox QAbstractItemView::item:selected {
background: rgb(232, 241, 250);
color: rgb(2, 65, 132);
}
QTabWidget{
margin-left:10;
background: rgb(239,242,245);
}
QTabWidget::pane {
border: none;
}
QTabWidget::tab-bar {
border: none;
}
QTabBar::tab {
border: none;
border-top-left-radius: 4px;
color: white;
background: rgb(239,242,245);
color: black;
height: 28px;
min-width: 85px;
margin-right: 5px;
}
QTabBar::tab:hover {
background: rgb(51,101,177);
}
QTabBar::tab:selected {
color: white;
background: rgb(51,101,177);
}
QTableView {
border: 1px solid grey;
}
QTableView::item {
padding-left: 5px;
padding-right: 5px;
background: white;
}
QTableView::item:selected {
border: 1px solid black;
background: rgba(255, 255, 255, 30);
color: black;
}
QTableView::item:selected:!active {
color: rgb(65, 65, 65);
}
QTableView::indicator {
border: 1px solid black;
width: 20px;
height: 20px;
}
QTableView::indicator:enabled:unchecked {
image: url(:/White/checkBox);
}
QTableView::indicator:enabled:unchecked:hover {
image: url(:/White/checkBoxHover);
}
QTableView::indicator:enabled:unchecked:pressed {
image: url(:/White/checkBoxPressed);
}
QTableView::indicator:enabled:checked {
image: url(:/White/checkBoxChecked);
}
QTableView::indicator:enabled:checked:hover {
image: url(:/White/checkBoxCheckedHover);
}
QTableView::indicator:enabled:checked:pressed {
image: url(:/White/checkBoxCheckedPressed);
}
QTableView::indicator:enabled:indeterminate {
image: url(:/White/checkBoxIndeterminate);
}
QTableView::indicator:enabled:indeterminate:hover {
image: url(:/White/checkBoxIndeterminateHover);
}
QTableView::indicator:enabled:indeterminate:pressed {
image: url(:/White/checkBoxIndeterminatePressed);
}

866
qss/css/dark.css Normal file
View File

@ -0,0 +1,866 @@
/*
Colour scheme used:
- White (text): #eff0f1
- Dark black (main bg): #272a2d
- Lighter dark black (menu bar): #373b3f
- Dark blue: #18465d
- Gray: #76797C
- Red (accents): #db1c49
Useful reference on QSS:
- http://doc.qt.io/qt-5/stylesheet-reference.html#alternate-background-color-prop
Be sure to change all image urls to the appropriate folder on your system.
*/
QPushButton#btn_serial:enabled {
border-image: url(:/qss/icon/btn_serial.png);
background: rgb(120, 170, 220);
color: white;
margin-left: 10;
margin-top:5;
}
QPushButton#btn_serial:!enabled {
background: rgb(180, 180, 180);
color: white;
}
QPushButton#btn_serial:enabled:hover{
background: rgb(100, 160, 220);
}
QPushButton#btn_serial:enabled:pressed{
background: rgb(0, 78, 161);
}
QPushButton#btn_process:enabled {
background: rgb(120, 170, 220);
color: white;
margin-left: 5;
margin-top:5;
}
QPushButton#btn_process:!enabled {
background: rgb(180, 180, 180);
color: white;
}
QPushButton#btn_process:enabled:hover{
background: rgb(100, 160, 220);
}
QPushButton#btn_process:enabled:pressed{
background: rgb(0, 78, 161);
}
/*================================================================
QWidget
================================================================*/
QWidget {
color: #eff0f1;
background-color: #272a2d;
selection-background-color: #db1c49;
selection-color: #eff0f1;
}
QWidget::item:hover {
background-color: #18465d;
color: #eff0f1;
}
QWidget::item:selected {
background-color: #18465d;
}
/*================================================================
QCheckBox/QGroupBox
================================================================*/
QCheckBox {
spacing: 5px;
outline: none;
color: #eff0f1;
margin-bottom: 2px;
}
QCheckBox:disabled {
color: #76797C;
}
QCheckBox::indicator,
QGroupBox::indicator {
width: 18px;
height: 18px;
}
QGroupBox::indicator {
margin-left: 2px;
}
QCheckBox::indicator:unchecked {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked.png);
}
QCheckBox::indicator:unchecked:hover,
QCheckBox::indicator:unchecked:focus,
QCheckBox::indicator:unchecked:pressed,
QGroupBox::indicator:unchecked:hover,
QGroupBox::indicator:unchecked:focus,
QGroupBox::indicator:unchecked:pressed {
border: none;
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_focus.png);
}
QCheckBox::indicator:checked {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked.png);
}
QCheckBox::indicator:checked:hover,
QCheckBox::indicator:checked:focus,
QCheckBox::indicator:checked:pressed,
QGroupBox::indicator:checked:hover,
QGroupBox::indicator:checked:focus,
QGroupBox::indicator:checked:pressed {
border: none;
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_focus.png);
}
QCheckBox::indicator:indeterminate {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_indeterminate.png);
}
QCheckBox::indicator:indeterminate:focus,
QCheckBox::indicator:indeterminate:hover,
QCheckBox::indicator:indeterminate:pressed {
image: url(C:/Users/franc/AppData/Roaming/TeXstudio/rc/checkbox_indeterminate_focus.png);
}
QCheckBox::indicator:checked:disabled,
QGroupBox::indicator:checked:disabled {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_disabled.png);
}
QCheckBox::indicator:unchecked:disabled,
QGroupBox::indicator:unchecked:disabled {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_disabled.png);
}
/*================================================================
QMenuBar - e.g. Main toolbar (file/edit/idefix etc.)
================================================================*/
QMenuBar {
color: #eff0f1;
background-color: #373b3f;
}
QMenuBar::item {
background: transparent;
}
/*================================================================
QMenu
================================================================*/
QMenu {
border: 1px solid #76797C;
color: #eff0f1;
margin: 2px;
}
QMenu::separator {
height: 2px;
background: #76797C;
margin-left: 5px;
margin-right: 5px;
}
/*================================================================
QToolbar
================================================================*/
QToolBar {
border: 1px solid #393838;
background: 1px solid #272a2d;
font-weight: bold;
}
QToolBar::handle:horizontal {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/Hmovetoolbar.png);
}
QToolBar::handle:vertical {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/Vmovetoolbar.png);
}
QToolBar::separator:horizontal {
width: 2px;
margin: 3px 10px;
background-color: #76797C;
}
QToolBar::separator:vertical {
height: 2px;
margin: 10px 3px;
background-color: #76797C;
}
/*================================================================
QScrollBar - e.g. Scrollbar in internal PDFviewer, editor window etc.
================================================================*/
QScrollBar:horizontal {
height: 25px;
margin: 3px 27px 3px 27px;
border: 1px transparent #2A2929;
border-radius: 4px;
background-color: #000000;
}
QScrollBar::handle:horizontal {
background-color: #76797C;
min-width: 15px;
border-radius: 4px;
}
QScrollBar::add-line:horizontal {
margin: 0px 3px 0px 3px;
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/right_arrow_disabled.png);
width: 20px;
height: 20px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal {
margin: 0px 3px 0px 3px;
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/left_arrow_disabled.png);
height: 20px;
width: 20px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QScrollBar::add-line:horizontal:hover,
QScrollBar::add-line:horizontal:on {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/right_arrow.png);
height: 20px;
width: 20px;
subcontrol-position: right;
subcontrol-origin: margin;
}
QScrollBar::sub-line:horizontal:hover,
QScrollBar::sub-line:horizontal:on {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/left_arrow.png);
height: 20px;
width: 20px;
subcontrol-position: left;
subcontrol-origin: margin;
}
QScrollBar::up-arrow:horizontal,
QScrollBar::down-arrow:horizontal {
background: none;
}
QScrollBar::add-page:horizontal,
QScrollBar::sub-page:horizontal {
background: none;
}
QScrollBar:vertical {
background-color: #000000;
width: 25px;
margin: 27px 3px 27px 3px;
border: 1px solid #2A2929;
border-radius: 4px;
}
QScrollBar::handle:vertical {
background-color: #76797C;
min-height: 15px;
border-radius: 4px;
}
QScrollBar::sub-line:vertical {
margin: 3px 0px 3px 0px;
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/up_arrow_disabled.png);
height: 20px;
width: 20px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-line:vertical {
margin: 3px 0px 3px 0px;
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow_disabled.png);
height: 20px;
width: 20px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical:hover,
QScrollBar::sub-line:vertical:on {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/up_arrow.png);
height: 20px;
width: 20px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-line:vertical:hover,
QScrollBar::add-line:vertical:on {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow.png);
height: 20px;
width: 20px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical {
background: none;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical {
background: none;
}
/*================================================================
QTabBar - e.g. File tabs (top), Bottom panel tabs (top), Autocompleter window tabs (bottom)
================================================================*/
QTabBar {
qproperty-drawBase: 0; /* important */
background-color: transparent;
}
/* <FIX> Workaround for QTabBars created from docked QDockWidgets which don't draw the border if not set and reseted as follows: */
QTabBar {
border-top: 1px transparent #76797C; /* set color for all QTabBars */
}
QDialog QTabBar {
border-color: transparent; /* set color for QTabBars inside Preferences dialog */
}
/* </FIX> */
QTabBar::close-button {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close.png);
background: transparent;
margin-top: 6px;
margin-bottom: 6px;
}
QTabBar::close-button:hover {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-hover.png);
background: transparent;
margin-top: 6px;
margin-bottom: 6px;
}
QTabBar::close-button:pressed {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
background: transparent;
margin-top: 6px;
margin-bottom: 6px;
}
/* TOP TABS */
QTabBar::tab:top {
color: #eff0f1;
border: 1px solid #76797C;
border-bottom: 1px transparent black;
background-color: #31363b;
padding: 5px;
min-width: 50px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
QTabBar::tab:top:selected {
color: #eff0f1;
background-color: #54575B;
border: 2px solid #76797C;
border-bottom: 3px solid #3daee9;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
QTabBar::tab:top:!selected:hover {
background-color: #18465d;
}
/* BOTTOM TABS */
QTabBar::tab:bottom {
color: #eff0f1;
border: 1px solid #76797C;
border-top: 1px transparent black;
background-color: #31363b;
padding: 5px;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
min-width: 50px;
}
QTabBar::tab:bottom:selected {
color: #eff0f1;
background-color: #54575B;
border: 2px solid #76797C;
border-top: 3px solid #3daee9;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
}
QTabBar::tab:bottom:!selected:hover {
background-color: #18465d;
}
/*================================================================
QDockWidget - e.g. "Search" header in internal PDF viewer
================================================================*/
QDockWidget {
titlebar-close-icon: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
titlebar-normal-icon: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
}
QDockWidget::title {
background: #373b3f;
color: transparent;
border: 1px transparent;
text-align: left;
}
QDockWidget::close-button,
QDockWidget::float-button {
border: transparent;
padding: 0px;
icon-size: 25px;
background: transparent;
}
QDockWidget::float-button {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock.png);
subcontrol-position: right center;
left: -50px;
}
QDockWidget::close-button {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close.png);
subcontrol-position: right center;
left: -10px;
}
QDockWidget::float-button:hover {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock-pressed.png);
subcontrol-position: right center;
left: -50px;
}
QDockWidget::close-button:hover {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
subcontrol-position: right center;
left: -10px;
}
QDockWidget::close-button:pressed {
padding: 2px -2px -2px 2px;
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/close-pressed.png);
}
QDockWidget::float-button:pressed {
padding: 2px -2px -2px 2px;
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/undock-pressed.png);
}
QDockWidget QListView {
outline: 0;
background: #272a2d;
alternate-background-color: #373b3f;
color: #eff0f1;
}
/*================================================================
QTreeView, QListView
================================================================*/
QTreeView,
QListView {
border: 1px solid #76797C;
background-color: #232629;
}
QTreeView:branch:selected,
QTreeView:branch:hover {
background: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
}
QTreeView::branch:has-siblings:!adjoins-item {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
}
QTreeView::branch:has-siblings:adjoins-item {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
}
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
border-image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/transparent.png);
}
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_closed.png);
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_open.png);
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_closed-on.png);
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/branch_open-on.png);
}
QListView::item:!selected:hover,
QTreeView::item:!selected:hover {
background: #18465d;
outline: 0;
color: #eff0f1;
}
QListView::item:selected:hover,
QTreeView::item:selected:hover {
background: #287399;
color: #eff0f1;
}
QTreeView::indicator:checked,
QListView::indicator:checked {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked.png);
}
QTreeView::indicator:unchecked,
QListView::indicator:unchecked {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked.png);
}
QTreeView::indicator:checked:hover,
QTreeView::indicator:checked:focus,
QTreeView::indicator:checked:pressed,
QListView::indicator:checked:hover,
QListView::indicator:checked:focus,
QListView::indicator:checked:pressed {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_checked_focus.png);
}
QTreeView::indicator:unchecked:hover,
QTreeView::indicator:unchecked:focus,
QTreeView::indicator:unchecked:pressed,
QListView::indicator:unchecked:hover,
QListView::indicator:unchecked:focus,
QListView::indicator:unchecked:pressed {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/checkbox_unchecked_focus.png);
}
/*================================================================
QPushButton
================================================================*/
QPushButton {
color: #eff0f1;
background-color: #31363b;
border-width: 1px;
border-color: #76797C;
border-style: solid;
padding: 5px;
border-radius: 2px;
outline: none;
}
QPushButton:disabled {
background-color: #31363b;
border-width: 1px;
border-color: #454545;
border-style: solid;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 10px;
padding-right: 10px;
border-radius: 2px;
color: #454545;
}
QPushButton:hover,
QPushButton:focus {
background-color: #18465d;
color: #ffffff;
}
QPushButton:pressed {
background-color: #18465d;
padding-top: -15px;
padding-bottom: -17px;
}
QPushButton:checked {
background-color: #76797C;
border-color: #6A6969;
}
/*================================================================
QToolButton - e.g. Reset pushbutton in GUI scaling, toolbar buttons
================================================================*/
QToolButton {
text-align: center;
}
/*================================================================
QComboBox
================================================================*/
QComboBox {
selection-background-color: #db1c49;
border: 1px solid #76797C;
border-radius: 2px;
padding: 5px;
min-width: 75px;
}
QComboBox:hover,
QPushButton:hover,
QAbstractSpinBox:hover,
QLineEdit:hover,
QTextEdit:hover,
QPlainTextEdit:hover,
QAbstractView:hover,
QTreeView:hover {
border: 1px solid #3daee9;
color: #eff0f1;
}
QComboBox:on {
padding-top: 3px;
padding-left: 4px;
selection-background-color: #4a4a4a;
}
QComboBox QAbstractItemView {
background-color: #232629;
border-radius: 2px;
border: 1px solid #76797C;
selection-background-color: #18465d;
}
QComboBox::drop-down {
subcontrol-origin: padding;
subcontrol-position: top right;
width: 35px;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
QComboBox::down-arrow {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow_disabled.png);
}
QComboBox::down-arrow:on,
QComboBox::down-arrow:hover,
QComboBox::down-arrow:focus {
image: url(C:/Users/user/AppData/Roaming/TeXstudio/rc/down_arrow.png);
}
/*================================================================
QLineEdit - e.g. Search textbox in internal pdf viewer
================================================================*/
QLineEdit {
selection-background-color: #db1c49;
border: 1px solid #76797C;
}
/*================================================================
QHeaderView
================================================================*/
QHeaderView {
background-color: #31363b;
border: 1px transparent;
border-radius: 0px;
margin: 0px;
padding: 0px;
}
QHeaderView::section {
background-color: #31363b;
color: #eff0f1;
padding: 5px;
border: 1px solid #76797C;
border-radius: 0px;
text-align: center;
}
QHeaderView::section::vertical::first,
QHeaderView::section::vertical::only-one {
border-top: 1px solid #76797C;
}
QHeaderView::section::vertical {
border-top: transparent;
}
QHeaderView::section::horizontal::first,
QHeaderView::section::horizontal::only-one {
border-left: 1px solid #76797C;
}
QHeaderView::section::horizontal {
border-left: transparent;
}
QHeaderView::section:checked {
color: #ffffff;
background-color: #31363B;
}
/*================================================================
QTableWidget
================================================================*/
QTableWidget {
background-color: #373b3f; /*#232629;*/
gridline-color: yellow; /*#31363b;*/
}
QTableWidget::item {
outline-style: none;
color: #eff0f1;
background: #31363b;
border: none;
border-bottom: 1px solid #31363b;
}
/*================================================================
QTableView - e.g. configMenu()->Syntax highlighting table
================================================================*/
QTableView {
border: 1px solid #76797C;
gridline-color: #31363b;
background-color: #232629;
}
QTableView,
QHeaderView {
border-radius: 0px;
}
QTableView::item:hover {
background: #18465d;
}
QTableView::item:pressed,
QListView::item:pressed,
QTreeView::item:pressed {
background: #18465d;
color: #eff0f1;
}
QTableView::item:selected:active,
QTreeView::item:selected:active,
QListView::item:selected:active {
background: #287399;
color: #eff0f1;
}
QTableCornerButton::section {
background-color: #31363b;
border: 1px transparent #76797C;
border-radius: 0px;
}
/*================================================================
QDialog - e.g. config menu, About TXS window, Wizards
================================================================*/
QDialog {
background-color: #373b3f;
}
QDialog QCheckBox,
QDialog QLabel {
background-color: transparent;
}
QDialog QToolButton { /*Same as QPushButton*/
color: #eff0f1;
background-color: #31363b;
border-width: 1px;
border-color: #76797C;
border-style: solid;
padding: 5px;
border-radius: 2px;
outline: none;
}
QDialog QToolButton:hover,
QDialog QToolButton:focus { /*Same as QPushButton*/
background-color: #18465d;
color: #ffffff;
}
QDialog QToolButton:pressed { /*Same as QPushButton*/
background-color: #18465d;
padding-top: -15px;
padding-bottom: -17px;
}
/* <FIX> Specific to table in "configMenu->Syntax highlighting" (hopefully) */
QDialog QTableWidget::item,
QDialog QTableView::item:hover { /* Turn off hover colour for cells -- it's distracting */
background-color: #31363b;
}
/* </FIX> */
/*================================================================
QSlider - e.g. GUI scaling settings
================================================================*/
QSlider,
QSlider:active,
QSlider:!active {
border: none;
background-color: transparent;
}
QSlider::groove:horizontal {
height: 12px;
}
QSlider::groove:vertical {
width: 12px;
}
QSlider::handle:horizontal,
QSlider::handle:vertical {
background-color: #db1c49;
border: 1px solid #db1c49;
width: 10px;
height: 15px;
border-radius: 8px;
}
QSlider::handle:horizontal:hover,
QSlider::handle:vertical:hover,
QSlider::handle:horizontal:pressed,
QSlider::handle:vertical:pressed {
border: 1px solid #A21538;
background-color: #A21538;
}
/*================================================================
QToolTip - e.g. popup upon hovering on filename tabs
================================================================*/
QToolTip {
border: 1px solid #272a2d;
background-color: #373b3f;
color: white;
padding: 0px; /*remove padding, for fix combobox tooltip.*/
}

45
qss/css/mainwindow.css Normal file
View File

@ -0,0 +1,45 @@

QTabBar{
background: rgb(22,155,213);
}
QTabBar::tab {
border: none;
border-top-left-radius: 4px;
color: white;
background: rgb(239,242,245);
color: black;
height: 28px;
min-width: 85px;
margin-right: 5px;
}
QTabBar::tab:hover {
background: rgb(51,101,177);
}
QTabBar::tab:selected {
color: white;
background: rgb(51,101,177);
}
QPushButton:enabled {
background: rgb(22,155,213);
color: white;
border-radius:3px;
}
QPushButton:!enabled {
background: white;
color: black;
}
QPushButton:enabled:hover {
background: rgb(100, 160, 220);
}
QPushButton:enabled:pressed {
background: rgb(120, 170, 220);
}

779
qss/css/qss.css Normal file
View File

@ -0,0 +1,779 @@
QDialog{
border: 1px solid rgb(rgb(0, 78, 161));
padding: 5px;
background: rgb(232, 241, 252);
}
QMainWindow{
border: none;
background: rgb(255, 255, 255);
}
QMainWindow::title{
text-align: right; /* align the text to the left */
background: rgb(7,71,166);
padding-left: 5px;
}
QWidget {
/* font-size: 10px;*/
}
QDockWidget{
background: rgb(187, 212, 238);
}
/*QFrame#window{
background: rgba(244,245,247,100);
}*/
QWidget#remoteWidget {
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
border: 1px solid rgb(111, 156, 207);
border-left: none;
background: transparent;
}
StyledWidget {
qproperty-normalColor: rgb(65, 65, 65);
qproperty-disableColor: rgb(180, 180, 180);
qproperty-highlightColor: rgb(0, 160, 230);
qproperty-errorColor: red;
}
QProgressIndicator {
qproperty-color: rgb(2, 65, 132);
}
/**********提示**********/
QToolTip{
border: 1px solid rgb(111, 156, 207);
background: white;
color: rgb(51, 51, 51);
}
/**********菜单栏**********/
QMenuBar {
/* background: rgb(7,71,166);*/
border: 1px solid rgb(111, 156, 207);
border-left: none;
border-right: none;
}
QMenuBar::item {
border: 1px solid transparent;
padding: 5px 10px 5px 10px;
height : 30px;
background: "white";
text-aligin: center;
font-size: 20px;;
}
QMenuBar::item:enabled {
font-size: 20px;;
background: rgb(198, 224, 252);
}
QMenuBar::item:!enabled {
font-size: 20px;;
background: rgb(198, 224, 252);
}
QMenuBar::item:enabled:selected {
font-size: 20px;;
background: rgb(198, 224, 252);
}
/**********菜单**********/
QMenu {
border: 1px solid rgb(2, 65, 132);
background: rgb(232, 241, 250);
height : 50px;
}
QssMessageBox#messagebox{
background: rgb(0, 0, 250);
}
QMenu::item {
height: 22px;
padding: 0px 25px 0px 20px;
}
QMenu::item:enabled {
color: rgb(84, 84, 84);
}
QMenu::item:!enabled {
color: rgb(155, 155, 155);
}
QMenu::item:enabled:selected {
color: rgb(2, 65, 132);
background: rgba(255, 255, 255, 200);
}
QMenu::separator {
height: 1px;
background: rgb(111, 156, 207);
}
QMenu::indicator {
width: 13px;
height: 13px;
}
QMenu::icon {
padding-left: 2px;
padding-right: 2px;
}
/**********状态栏**********/
QStatusBar {
background: rgb(111, 156, 207);
border: 1px solid rgb(111, 156, 207);
border-left: none;
border-right: none;
border-bottom: none;
}
QStatusBar::item {
border: none;
border-right: 1px solid rgb(111, 156, 207);
}
/**********分组框**********/
QGroupBox {
border: 1px solid rgb(111, 156, 207);
border-radius: 4px;
margin-top: 10px;
}
QGroupBox::title {
color: rgb(56, 99, 154);
top: -12px;
left: 10px;
}
QTabWidget{
margin-left:10;
}
/**********页签项**********/
QTabWidget::pane {
border: none;
border-top: 3px solid rgb(0, 78, 161);
background: rgb(187, 212, 238);
}
QTabWidget::tab-bar {
border: none;
}
QTabBar::tab {
border: none;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
color: white;
background: rgb(120, 170, 220);
height: 28px;
min-width: 85px;
margin-right: 5px;
padding-left: 5px;
padding-right: 5px;
}
QTabBar::tab:hover {
background: rgb(0, 78, 161);
}
QTabBar::tab:selected {
color: white;
background: rgb(0, 78, 161);
}
QTabWidget#tabWidget::pane {
border: 1px solid rgb(111, 156, 207);
background: rgb(232, 241, 252);
margin-top: -1px;
}
QTabBar#tabBar::tab {
border: 1px solid rgb(111, 156, 207);
border-bottom: none;
color: rgb(70, 71, 73);
background: transparent;
}
QTabBar#tabBar::tab:hover {
color: rgb(2, 65, 132);
}
QTabBar#tabBar::tab:selected {
color: rgb(2, 65, 132);
background: rgb(232, 241, 252);
}
/**********表头**********/
QHeaderView{
border: 1px solid black;
border-bottom: 3px solid rgb(0, 78, 161);
background: transparent;
min-height: 30px;
}
QHeaderView::section:horizontal {
border: none;
color: rgb(2, 65, 132);
background: transparent;
padding-left: 5px;
}
QHeaderView::section:horizontal:hover {
color: white;
background: rgb(0, 78, 161);
}
QHeaderView::section:horizontal:pressed {
color: white;
background: rgb(6, 94, 187);
}
QHeaderView::up-arrow {
width: 13px;
height: 11px;
padding-right: 5px;
image: url(:/White/topArrow);
subcontrol-position: center right;
}
QHeaderView::up-arrow:hover, QHeaderView::up-arrow:pressed {
image: url(:/White/topArrowHover);
}
QHeaderView::down-arrow {
width: 13px;
height: 11px;
padding-right: 5px;
image: url(:/White/bottomArrow);
subcontrol-position: center right;
}
QHeaderView::down-arrow:hover, QHeaderView::down-arrow:pressed {
image: url(:/White/bottomArrowHover);
}
/**********TreeView**********/
QTreeView::item {
height: 25px;
border-right: 0.5px solid grey;
background: transparent;
}
QTreeView::item:hover {
background : #DBDBDB;
}
QTreeView::item:selected {
background : grey;
}
/**********表格**********/
QTableView {
border: 1px solid grey;
background: rgb(224, 238, 255);
gridline-color: rgb(111, 156, 207);
}
QTableView::item {
padding-left: 5px;
padding-right: 5px;
border: 1px solid black;
background: white;
}
QTableView::item:selected {
border: 1px solid black;
background: rgba(255, 255, 255, 30);
}
QTableView::item:selected:!active {
color: rgb(65, 65, 65);
}
QTableView::indicator {
border: 1px solid black;
width: 20px;
height: 20px;
}
QTableView::indicator:enabled:unchecked {
image: url(:/White/checkBox);
}
QTableView::indicator:enabled:unchecked:hover {
image: url(:/White/checkBoxHover);
}
QTableView::indicator:enabled:unchecked:pressed {
image: url(:/White/checkBoxPressed);
}
QTableView::indicator:enabled:checked {
image: url(:/White/checkBoxChecked);
}
QTableView::indicator:enabled:checked:hover {
image: url(:/White/checkBoxCheckedHover);
}
QTableView::indicator:enabled:checked:pressed {
image: url(:/White/checkBoxCheckedPressed);
}
QTableView::indicator:enabled:indeterminate {
image: url(:/White/checkBoxIndeterminate);
}
QTableView::indicator:enabled:indeterminate:hover {
image: url(:/White/checkBoxIndeterminateHover);
}
QTableView::indicator:enabled:indeterminate:pressed {
image: url(:/White/checkBoxIndeterminatePressed);
}
/**********滚动条-水平**********/
QScrollBar:horizontal {
height: 20px;
background: transparent;
margin-top: 3px;
margin-bottom: 3px;
}
QScrollBar::handle:horizontal {
height: 20px;
min-width: 30px;
background: rgb(170, 200, 230);
margin-left: 15px;
margin-right: 15px;
}
QScrollBar::handle:horizontal:hover {
background: rgb(165, 195, 225);
}
QScrollBar::sub-line:horizontal {
width: 15px;
background: transparent;
image: url(:/White/arrowLeft);
subcontrol-position: left;
}
QScrollBar::add-line:horizontal {
width: 15px;
background: transparent;
image: url(:/White/arrowRight);
subcontrol-position: right;
}
QScrollBar::sub-line:horizontal:hover {
background: rgb(170, 200, 230);
}
QScrollBar::add-line:horizontal:hover {
background: rgb(170, 200, 230);
}
QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal {
background: transparent;
}
/**********滚动条-垂直**********/
QScrollBar:vertical {
width: 20px;
background: transparent;
margin-left: 3px;
margin-right: 3px;
}
QScrollBar::handle:vertical {
width: 20px;
min-height: 30px;
background: rgb(170, 200, 230);
margin-top: 15px;
margin-bottom: 15px;
}
QScrollBar::handle:vertical:hover {
background: rgb(165, 195, 225);
}
QScrollBar::sub-line:vertical {
height: 15px;
background: transparent;
image: url(:/White/topArrow);
subcontrol-position: top;
}
QScrollBar::add-line:vertical {
height: 15px;
background: transparent;
image: url(:/White/bottomArrow);
subcontrol-position: bottom;
}
QScrollBar::sub-line:vertical:hover {
background: rgb(170, 200, 230);
}
QScrollBar::add-line:vertical:hover {
background: rgb(170, 200, 230);
}
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
background: transparent;
}
QScrollBar#verticalScrollBar:vertical {
margin-top: 30px;
}
/**********下拉列表**********/
QComboBox {
height: 25px;
border: 1px solid rgb(111, 156, 207);
background: white;
}
QComboBox:enabled {
color: rgb(84, 84, 84);
}
QComboBox:!enabled {
color: rgb(80, 80, 80);
}
QComboBox:enabled:hover, QComboBox:enabled:focus {
color: rgb(51, 51, 51);
}
QComboBox::drop-down {
width: 20px;
border: none;
background: transparent;
}
QComboBox::drop-down:hover {
background: rgba(0, 0, 0, 30);
}
QComboBox::down-arrow {
image: url(:/qss/icon/combo_arrow.png);
max-height:100%;
max-width:100%;
}
QComboBox::down-arrow:on {
top: 1px;
}
QComboBox QAbstractItemView {
border: 1px solid rgb(111, 156, 207);
background: white;
outline: none;
}
QComboBox QAbstractItemView::item {
height: 25px;
color: rgb(73, 73, 73);
}
QComboBox QAbstractItemView::item:selected {
background: rgb(232, 241, 250);
color: rgb(2, 65, 132);
}
/**********进度条**********/
QProgressBar{
border: black;
text-align: center;
color: white;
background: rgb(173, 202, 232);
}
QProgressBar::chunk {
background: rgb(16, 135, 209);
}
QProgressBar {
border: rgb(173, 202, 232);
text-align: center;
color: light;
background-color: transparent;
background-image: rgb(173, 202, 232);
background-repeat: repeat-x;
}
QProgressBar::chunk {
border: none;
background-color:rgb(173, 202, 232);
background-repeat: repeat-x;
}
/**********复选框**********/
QCheckBox{
spacing: 5px;
}
QCheckBox:enabled:checked{
color: rgb(2, 65, 132);
}
QCheckBox:enabled:!checked{
color: rgb(70, 71, 73);
}
QCheckBox:enabled:hover{
color: rgb(0, 78, 161);
}
QCheckBox:!enabled{
color: rgb(80, 80, 80);
}
QCheckBox::indicator {
width: 20px;
height: 20px;
}
QCheckBox::indicator:unchecked {
image: url(:/qss/icon/checkbox.png);
}
QCheckBox::indicator:unchecked:hover {
image: url(:/qss/icon/checkbox_h.png);
}
QCheckBox::indicator:unchecked:pressed {
image: url(:/qss/icon/checkbox_p.png);
}
QCheckBox::indicator:checked {
image: url(:/qss/icon/check_box_p.png);
}
QCheckBox::indicator:checked:hover {
image: url(:/qss/icon/check_box_p.png);
}
QCheckBox::indicator:checked:pressed {
image: url(:/qss/icon/check_box_p.png);
}
QCheckBox::indicator:indeterminate {
image: url(:/qss/icon/check_box_p.png);
}
QCheckBox::indicator:indeterminate:hover {
image: url(:/qss/icon/check_box_p.png);
}
QCheckBox::indicator:indeterminate:pressed {
image: url(:/qss/icon/check_box_p.png);
}
/**********单选框**********/
QRadioButton{
spacing: 5px;
}
QRadioButton:enabled:checked{
color: rgb(2, 65, 132);
}
QRadioButton:enabled:!checked{
color: rgb(70, 71, 73);
}
QRadioButton:enabled:hover{
color: rgb(0, 78, 161);
}
QRadioButton:!enabled{
color: rgb(80, 80, 80);
}
QRadioButton::indicator {
width: 20px;
height: 20px;
}
QRadioButton::indicator:unchecked {
image: url(:/White/radioButton);
}
QRadioButton::indicator:unchecked:hover {
image: url(:/White/radioButtonHover);
}
QRadioButton::indicator:unchecked:pressed {
image: url(:/White/radioButtonPressed);
}
QRadioButton::indicator:checked {
image: url(:/White/radioButtonChecked);
}
QRadioButton::indicator:checked:hover {
image: url(:/White/radioButtonCheckedHover);
}
QRadioButton::indicator:checked:pressed {
image: url(:/White/radioButtonCheckedPressed);
}
/**********输入框**********/
QLineEdit {
border-radius: 4px;
height: 25px;
border: 1px solid rgb(111, 156, 207);
background: white;
}
QLineEdit:enabled {
color: rgb(84, 84, 84);
}
QLineEdit:enabled:hover, QLineEdit:enabled:focus {
color: rgb(51, 51, 51);
}
QLineEdit:!enabled {
color: rgb(80, 80, 80);
}
/**********文本编辑框**********/
QTextEdit {
border: 1px solid rgb(111, 156, 207);
color: rgb(70, 71, 73);
background: rgb(187, 212, 238);
}
/**********滚动区域**********/
QScrollArea {
border: 1px solid rgb(111, 156, 207);
background: rgb(187, 212, 238);
}
/**********滚动区域**********/
QWidget#transparentWidget {
background: transparent;
}
/**********微调器**********/
QSpinBox {
border-radius: 4px;
height: 24px;
min-width: 40px;
border: 1px solid rgb(111, 156, 207);
background: white;
}
QSpinBox:enabled {
color: rgb(60, 60, 60);
}
QSpinBox:enabled:hover, QSpinBox:enabled:focus {
color: rgb(51, 51, 51);
}
QSpinBox:!enabled {
color: rgb(210, 210, 210);
background: transparent;
}
QSpinBox::up-button {
border-left: 1px solid rgb(111, 156, 207);
width: 18px;
height: 12px;
border-top-right-radius: 4px;
image: url(:/White/upButton);
}
QSpinBox::up-button:!enabled {
background: transparent;
}
QSpinBox::up-button:enabled:hover {
background: rgb(255, 255, 255, 30);
}
QSpinBox::down-button {
border-left: 1px solid rgb(111, 156, 207);
width: 18px;
height: 12px;
border-bottom-right-radius: 4px;
image: url(:/White/downButton);
}
QSpinBox::down-button:!enabled {
background: transparent;
}
QSpinBox::down-button:hover {
background: rgb(255, 255, 255, 30);
}
QLabel#label_3{
font-size: 20px;
background-color: rgb(255, 255, 255, 30);
color : light;
}
QDockWidget *{
}
/**********标签**********/
QLabel#grayLabel {
color: rgb(70, 71, 73);
}
QLabel#highlightLabel {
color: rgb(2, 65, 132);
}
QLabel#redLabel {
color: red;
}
QLabel#grayYaHeiLabel {
color: rgb(175, 175, 175);
font-size: 15px;
}
QLabel#blueLabel {
color: rgb(0, 160, 230);
}
QLabel#listLabel {
color: rgb(51, 51, 51);
}
QLabel#lineBlueLabel {
background: rgb(0, 78, 161);
}
QLabel#graySeperateLabel {
background: rgb(200, 220, 230);
}
QLabel#seperateLabel {
background: rgb(112, 153, 194);
}
QLabel#radiusBlueLabel {
border-radius: 15px;
color: white;
font-size: 18px;
background: rgb(0, 78, 161);
}
QLabel#skinLabel[colorProperty="normal"] {
color: rgb(56, 99, 154);
}
QLabel#skinLabel[colorProperty="highlight"] {
color: rgb(0, 160, 230);
}
QLabel#informationLabel {
qproperty-pixmap: url(:/White/information);
}
QLabel#errorLabel {
qproperty-pixmap: url(:/White/error);
}
QLabel#successLabel {
qproperty-pixmap: url(:/White/success);
}
QLabel#questionLabel {
qproperty-pixmap: url(:/White/question);
}
QLabel#warningLabel {
qproperty-pixmap: url(:/White/warning);
}
QLabel#groupLabel {
color: rgb(56, 99, 154);
border: 1px solid rgb(111, 156, 207);
font-size: 15px;
border-top-color: transparent;
border-right-color: transparent;
border-left-color: transparent;
}
/**********按钮**********/
QToolButton#nsccButton {
border: none;
color: rgb(2, 65, 132);
background: transparent;
padding: 10px;
qproperty-icon: url(:/White/nscc);
qproperty-iconSize: 32px 32px;
qproperty-toolButtonStyle: ToolButtonTextUnderIcon;
}
QToolButton#nsccButton:hover {
background: rgb(187, 212, 238);
}
QToolButton#transferButton {
border: none;
color: rgb(2, 65, 132);
background: transparent;
padding: 10px;
qproperty-icon: url(:/White/transfer);
qproperty-iconSize: 32px 32px;
qproperty-toolButtonStyle: ToolButtonTextUnderIcon;
}
QToolButton#transferButton:hover {
background: rgb(187, 212, 238);
}
/**********按钮**********/
QPushButton{
border: none; /*去除边框*/
font-size: 15px;
}
QPushButton:enabled {
background: rgb(0, 78, 161);
color: white;
}
QPushButton:!enabled {
background: rgb(180, 180, 180);
color: white;
}
QPushButton:enabled:hover{
background: rgb(100, 160, 220);
}
QPushButton:enabled:pressed{
background: rgb(120, 170, 220);
}

View File

@ -0,0 +1,6 @@
QWidget#save_data_form
{
background: "white";
border:1px solid black;
}

View File

@ -0,0 +1,46 @@
QWidget#vibration_comparison_form
{
border: 1px solid black;
}
QWidget#vibration_comparison_form QLabel#label
{
}
QWidget#vibration_comparison_form QComboBox#comboBox
{
border-radius:3px;
}
QWidget#vibration_comparison_form QComboBox#comboBox_2
{
border-radius:3px;
}
QWidget#vibration_comparison_form QLabel#label_2
{
}
QWidget#vibration_comparison_form QComboBox#comboBox_3
{
border-radius:3px;
}
QWidget#vibration_comparison_form QComboBox#comboBox_4
{
border-radius:3px;
}
QWidget#vibration_comparison_form QPushButton#pushButton
{
width: 24px;
}
QWidget#vibration_comparison_form QPushButton#pushButton_2
{
width: 24px;
}
QWidget#vibration_comparison_form QLabel#label_3
{
}
QWidget#vibration_comparison_form QRadioButton#radioButton
{
}
QWidget#vibration_comparison_form QGraphicsView#graphicsView
{
}

303
qss/css/white.css Normal file
View File

@ -0,0 +1,303 @@
/* * The MIT License (MIT) * * Copyright : http://blog.csdn.net/liang19890820 * * Author : 一去丶二三里 * * Date : 2016/07/22 * * Description : 白色靓丽 * */
/**********子界面背景**********/
QWidget#customWidget { background: rgb(173, 202, 232); }
/**********子界面中央背景**********/
QWidget#centerWidget { background: rgb(232, 241, 252); }
/**********主界面样式**********/
QWidget#mainWindow { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 252); }
QWidget#messageWidget { background: rgba(173, 202, 232, 50%); }
QWidget#loadingWidget { border: none; border-radius: 5px; background: rgb(187, 212, 238); }
QWidget#remoteWidget { border-top-right-radius: 10px; border-bottom-right-radius: 10px; border: 1px solid rgb(111, 156, 207); border-left: none; background: transparent; }
StyledWidget { qproperty-normalColor: rgb(65, 65, 65); qproperty-disableColor: rgb(180, 180, 180); qproperty-highlightColor: rgb(0, 160, 230); qproperty-errorColor: red; }
QProgressIndicator { qproperty-color: rgb(2, 65, 132); }
/**********提示**********/
QToolTip{ border: 1px solid rgb(111, 156, 207); background: white; color: rgb(51, 51, 51); }
/**********菜单栏**********/
QMenuBar { background: rgb(187, 212, 238); border: 1px solid rgb(111, 156, 207); border-left: none; border-right: none; }
QMenuBar::item { border: 1px solid transparent; padding: 5px 10px 5px 10px; background: transparent; }
QMenuBar::item:enabled { color: rgb(2, 65, 132); }
QMenuBar::item:!enabled { color: rgb(155, 155, 155); }
QMenuBar::item:enabled:selected { border-top-color: rgb(111, 156, 207); border-bottom-color: rgb(111, 156, 207); background: rgb(198, 224, 252); }
/**********菜单**********/
QMenu { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 250); }
QMenu::item { height: 22px; padding: 0px 25px 0px 20px; }
QMenu::item:enabled { color: rgb(84, 84, 84); }
QMenu::item:!enabled { color: rgb(155, 155, 155); }
QMenu::item:enabled:selected { color: rgb(2, 65, 132); background: rgba(255, 255, 255, 200); }
QMenu::separator { height: 1px; background: rgb(111, 156, 207); }
QMenu::indicator { width: 13px; height: 13px; }
QMenu::icon { padding-left: 2px; padding-right: 2px; }
/**********状态栏**********/
QStatusBar { background: rgb(187, 212, 238); border: 1px solid rgb(111, 156, 207); border-left: none; border-right: none; border-bottom: none; }
QStatusBar::item { border: none; border-right: 1px solid rgb(111, 156, 207); }
/**********分组框**********/
QGroupBox { font-size: 15px; border: 1px solid rgb(111, 156, 207); border-radius: 4px; margin-top: 10px; }
QGroupBox::title { color: rgb(56, 99, 154); top: -12px; left: 10px; }
/**********页签项**********/
QTabWidget::pane { border: none; border-top: 3px solid rgb(0, 78, 161); background: rgb(187, 212, 238); }
QTabWidget::tab-bar { border: none; }
QTabBar::tab { border: none; border-top-left-radius: 4px; border-top-right-radius: 4px; color: white; background: rgb(120, 170, 220); height: 28px; min-width: 85px; margin-right: 5px; padding-left: 5px; padding-right: 5px; }
QTabBar::tab:hover { background: rgb(0, 78, 161); }
QTabBar::tab:selected { color: white; background: rgb(0, 78, 161); }
QTabWidget#tabWidget::pane { border: 1px solid rgb(111, 156, 207); background: rgb(232, 241, 252); margin-top: -1px; }
QTabBar#tabBar::tab { border: 1px solid rgb(111, 156, 207); border-bottom: none; color: rgb(70, 71, 73); background: transparent; }
QTabBar#tabBar::tab:hover { color: rgb(2, 65, 132); }
QTabBar#tabBar::tab:selected { color: rgb(2, 65, 132); background: rgb(232, 241, 252); }
/**********表头**********/
QHeaderView{ border: none; border-bottom: 3px solid rgb(0, 78, 161); background: transparent; min-height: 30px; }
QHeaderView::section:horizontal { border: none; color: rgb(2, 65, 132); background: transparent; padding-left: 5px; }
QHeaderView::section:horizontal:hover { color: white; background: rgb(0, 78, 161); }
QHeaderView::section:horizontal:pressed { color: white; background: rgb(6, 94, 187); }
QHeaderView::up-arrow { width: 13px; height: 11px; padding-right: 5px; image: url(:/White/topArrow); subcontrol-position: center right; }
QHeaderView::up-arrow:hover, QHeaderView::up-arrow:pressed { image: url(:/White/topArrowHover); }
QHeaderView::down-arrow { width: 13px; height: 11px; padding-right: 5px; image: url(:/White/bottomArrow); subcontrol-position: center right; }
QHeaderView::down-arrow:hover, QHeaderView::down-arrow:pressed { image: url(:/White/bottomArrowHover); }
/**********表格**********/
QTableView { border: 1px solid rgb(111, 156, 207); background: rgb(224, 238, 255); gridline-color: rgb(111, 156, 207); }
QTableView::item { padding-left: 5px; padding-right: 5px; border: none; background: white; border-right: 1px solid rgb(111, 156, 207); border-bottom: 1px solid rgb(111, 156, 207); }
QTableView::item:selected { background: rgba(255, 255, 255, 100); }
QTableView::item:selected:!active { color: rgb(65, 65, 65); }
QTableView::indicator { width: 20px; height: 20px; }
QTableView::indicator:enabled:unchecked { image: url(:/White/checkBox); }
QTableView::indicator:enabled:unchecked:hover { image: url(:/White/checkBoxHover); }
QTableView::indicator:enabled:unchecked:pressed { image: url(:/White/checkBoxPressed); }
QTableView::indicator:enabled:checked { image: url(:/White/checkBoxChecked); }
QTableView::indicator:enabled:checked:hover { image: url(:/White/checkBoxCheckedHover); }
QTableView::indicator:enabled:checked:pressed { image: url(:/White/checkBoxCheckedPressed); }
QTableView::indicator:enabled:indeterminate { image: url(:/White/checkBoxIndeterminate); }
QTableView::indicator:enabled:indeterminate:hover { image: url(:/White/checkBoxIndeterminateHover); }
QTableView::indicator:enabled:indeterminate:pressed { image: url(:/White/checkBoxIndeterminatePressed); }
/**********滚动条-水平**********/
QScrollBar:horizontal { height: 20px; background: transparent; margin-top: 3px; margin-bottom: 3px; }
QScrollBar::handle:horizontal { height: 20px; min-width: 30px; background: rgb(170, 200, 230); margin-left: 15px; margin-right: 15px; }
QScrollBar::handle:horizontal:hover { background: rgb(165, 195, 225); }
QScrollBar::sub-line:horizontal { width: 15px; background: transparent; image: url(:/White/arrowLeft); subcontrol-position: left; }
QScrollBar::add-line:horizontal { width: 15px; background: transparent; image: url(:/White/arrowRight); subcontrol-position: right; }
QScrollBar::sub-line:horizontal:hover { background: rgb(170, 200, 230); }
QScrollBar::add-line:horizontal:hover { background: rgb(170, 200, 230); }
QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal { background: transparent; }
/**********滚动条-垂直**********/
QScrollBar:vertical { width: 20px; background: transparent; margin-left: 3px; margin-right: 3px; }
QScrollBar::handle:vertical { width: 20px; min-height: 30px; background: rgb(170, 200, 230); margin-top: 15px; margin-bottom: 15px; }
QScrollBar::handle:vertical:hover { background: rgb(165, 195, 225); }
QScrollBar::sub-line:vertical { height: 15px; background: transparent; image: url(:/White/topArrow); subcontrol-position: top; }
QScrollBar::add-line:vertical { height: 15px; background: transparent; image: url(:/White/bottomArrow); subcontrol-position: bottom; }
QScrollBar::sub-line:vertical:hover { background: rgb(170, 200, 230); }
QScrollBar::add-line:vertical:hover { background: rgb(170, 200, 230); }
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: transparent; }
QScrollBar#verticalScrollBar:vertical { margin-top: 30px; }
/**********下拉列表**********/
QComboBox { height: 25px; border-radius: 4px; border: 1px solid rgb(111, 156, 207); background: white; }
QComboBox:enabled { color: rgb(84, 84, 84); }
QComboBox:!enabled { color: rgb(80, 80, 80); }
QComboBox:enabled:hover, QComboBox:enabled:focus { color: rgb(51, 51, 51); }
QComboBox::drop-down { width: 20px; border: none; background: transparent; }
QComboBox::drop-down:hover { background: rgba(255, 255, 255, 30); }
QComboBox::down-arrow { image: url(:/White/arrowBottom); }
QComboBox::down-arrow:on { /**top: 1px;**/ }
QComboBox QAbstractItemView { border: 1px solid rgb(111, 156, 207); background: white; outline: none; }
QComboBox QAbstractItemView::item { height: 25px; color: rgb(73, 73, 73); }
QComboBox QAbstractItemView::item:selected { background: rgb(232, 241, 250); color: rgb(2, 65, 132); }
/**********进度条**********/
QProgressBar{ border: none; text-align: center; color: white; background: rgb(173, 202, 232); }
QProgressBar::chunk { background: rgb(16, 135, 209); }
QProgressBar#progressBar { border: none; text-align: center; color: white; background-color: transparent; background-image: url(":/White/progressBar"); background-repeat: repeat-x; }
QProgressBar#progressBar::chunk { border: none; background-color: transparent; background-image: url(":/White/progressBarChunk"); background-repeat: repeat-x; }
/**********复选框**********/
QCheckBox{ spacing: 5px; }
QCheckBox:enabled:checked{ color: rgb(2, 65, 132); }
QCheckBox:enabled:!checked{ color: rgb(70, 71, 73); }
QCheckBox:enabled:hover{ color: rgb(0, 78, 161); }
QCheckBox:!enabled{ color: rgb(80, 80, 80); }
QCheckBox::indicator { width: 20px; height: 20px; }
QCheckBox::indicator:unchecked { image: url(:/White/checkBox); }
QCheckBox::indicator:unchecked:hover { image: url(:/White/checkBoxHover); }
QCheckBox::indicator:unchecked:pressed { image: url(:/White/checkBoxPressed); }
QCheckBox::indicator:checked { image: url(:/White/checkBoxChecked); }
QCheckBox::indicator:checked:hover { image: url(:/White/checkBoxCheckedHover); }
QCheckBox::indicator:checked:pressed { image: url(:/White/checkBoxCheckedPressed); }
QCheckBox::indicator:indeterminate { image: url(:/White/checkBoxIndeterminate); }
QCheckBox::indicator:indeterminate:hover { image: url(:/White/checkBoxIndeterminateHover); }
QCheckBox::indicator:indeterminate:pressed { image: url(:/White/checkBoxIndeterminatePressed); }
/**********单选框**********/
QRadioButton{ spacing: 5px; }
QRadioButton:enabled:checked{ color: rgb(2, 65, 132); }
QRadioButton:enabled:!checked{ color: rgb(70, 71, 73); }
QRadioButton:enabled:hover{ color: rgb(0, 78, 161); }
QRadioButton:!enabled{ color: rgb(80, 80, 80); }
QRadioButton::indicator { width: 20px; height: 20px; }
QRadioButton::indicator:unchecked { image: url(:/White/radioButton); }
QRadioButton::indicator:unchecked:hover { image: url(:/White/radioButtonHover); }
QRadioButton::indicator:unchecked:pressed { image: url(:/White/radioButtonPressed); }
QRadioButton::indicator:checked { image: url(:/White/radioButtonChecked); }
QRadioButton::indicator:checked:hover { image: url(:/White/radioButtonCheckedHover); }
QRadioButton::indicator:checked:pressed { image: url(:/White/radioButtonCheckedPressed); }
/**********输入框**********/
QLineEdit { border-radius: 4px; height: 25px; border: 1px solid rgb(111, 156, 207); background: white; }
QLineEdit:enabled { color: rgb(84, 84, 84); }
QLineEdit:enabled:hover, QLineEdit:enabled:focus { color: rgb(51, 51, 51); }
QLineEdit:!enabled { color: rgb(80, 80, 80); }
/**********文本编辑框**********/
QTextEdit { border: 1px solid rgb(111, 156, 207); color: rgb(70, 71, 73); background: rgb(187, 212, 238); }
/**********滚动区域**********/
QScrollArea { border: 1px solid rgb(111, 156, 207); background: rgb(187, 212, 238); }
/**********滚动区域**********/
QWidget#transparentWidget { background: transparent; }
/**********微调器**********/
QSpinBox { border-radius: 4px; height: 24px; min-width: 40px; border: 1px solid rgb(111, 156, 207); background: white; }
QSpinBox:enabled { color: rgb(60, 60, 60); }
QSpinBox:enabled:hover, QSpinBox:enabled:focus { color: rgb(51, 51, 51); }
QSpinBox:!enabled { color: rgb(210, 210, 210); background: transparent; }
QSpinBox::up-button { border-left: 1px solid rgb(111, 156, 207); width: 18px; height: 12px; border-top-right-radius: 4px; image: url(:/White/upButton); }
QSpinBox::up-button:!enabled { background: transparent; }
QSpinBox::up-button:enabled:hover { background: rgb(255, 255, 255, 30); }
QSpinBox::down-button { border-left: 1px solid rgb(111, 156, 207); width: 18px; height: 12px; border-bottom-right-radius: 4px; image: url(:/White/downButton); }
QSpinBox::down-button:!enabled { background: transparent; }
QSpinBox::down-button:hover { background: rgb(255, 255, 255, 30); }
/**********标签**********/
QLabel#grayLabel { color: rgb(70, 71, 73); }
QLabel#highlightLabel { color: rgb(2, 65, 132); }
QLabel#redLabel { color: red; }
QLabel#grayYaHeiLabel { color: rgb(175, 175, 175); font-size: 16px; }
QLabel#blueLabel { color: rgb(0, 160, 230); }
QLabel#listLabel { color: rgb(51, 51, 51); }
QLabel#lineBlueLabel { background: rgb(0, 78, 161); }
QLabel#graySeperateLabel { background: rgb(200, 220, 230); }
QLabel#seperateLabel { background: rgb(112, 153, 194); }
QLabel#radiusBlueLabel { border-radius: 15px; color: white; font-size: 16px; background: rgb(0, 78, 161); }
QLabel#skinLabel[colorProperty="normal"] { color: rgb(56, 99, 154); }
QLabel#skinLabel[colorProperty="highlight"] { color: rgb(0, 160, 230); }
QLabel#informationLabel { qproperty-pixmap: url(:/White/information); }
QLabel#errorLabel { qproperty-pixmap: url(:/White/error); }
QLabel#successLabel { qproperty-pixmap: url(:/White/success); }
QLabel#questionLabel { qproperty-pixmap: url(:/White/question); }
QLabel#warningLabel { qproperty-pixmap: url(:/White/warning); }
QLabel#groupLabel { color: rgb(56, 99, 154); border: 1px solid rgb(111, 156, 207); font-size: 15px; border-top-color: transparent; border-right-color: transparent; border-left-color: transparent; }
/**********按钮**********/
QToolButton#nsccButton { border: none; color: rgb(2, 65, 132); background: transparent; padding: 10px; qproperty-icon: url(:/White/nscc); qproperty-iconSize: 32px 32px; qproperty-toolButtonStyle: ToolButtonTextUnderIcon; }
QToolButton#nsccButton:hover { background: rgb(187, 212, 238); }
QToolButton#transferButton { border: none; color: rgb(2, 65, 132); background: transparent; padding: 10px; qproperty-icon: url(:/White/transfer); qproperty-iconSize: 32px 32px; qproperty-toolButtonStyle: ToolButtonTextUnderIcon; }
QToolButton#transferButton:hover { background: rgb(187, 212, 238); }
/**********按钮**********/
QPushButton{ border-radius: 4px; border: none; width: 75px; height: 25px; }
QPushButton:enabled { background: rgb(120, 170, 220); color: white; }
QPushButton:!enabled { background: rgb(180, 180, 180); color: white; }
QPushButton:enabled:hover{ background: rgb(100, 160, 220); }
QPushButton:enabled:pressed{ background: rgb(0, 78, 161); }
QPushButton#blueButton { color: white; }
QPushButton#blueButton:enabled { background: rgb(0, 78, 161); color: white; }
QPushButton:!enabled { background: rgb(180, 180, 180); color: white; }
QPushButton#blueButton:enabled:hover { background: rgb(2, 65, 132); }
QPushButton#blueButton:enabled:pressed { background: rgb(6, 94, 187); }
QPushButton#selectButton { border: none; border-radius: none; border-left: 1px solid rgb(111, 156, 207); background: transparent; image: url(:/White/scan); color: rgb(51, 51, 51); }
QPushButton#selectButton:enabled:hover{ background: rgb(187, 212, 238); }
QPushButton#selectButton:enabled:pressed{ background: rgb(120, 170, 220); }
QPushButton#linkButton { background: transparent; color: rgb(0, 160, 230); text-align:left; }
QPushButton#linkButton:hover { color: rgb(20, 185, 255); text-decoration: underline; }
QPushButton#linkButton:pressed { color: rgb(0, 160, 230); }
QPushButton#transparentButton { background: transparent; }
/*****************标题栏按钮*******************/
QPushButton#minimizeButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/minimizeHover); }
QPushButton#minimizeButton:hover { image: url(:/White/minimize); }
QPushButton#minimizeButton:pressed { image: url(:/White/minimizePressed); }
QPushButton#maximizeButton[maximizeProperty="maximize"] { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/maximizeHover); }
QPushButton#maximizeButton[maximizeProperty="maximize"]:hover { image: url(:/White/maximize); }
QPushButton#maximizeButton[maximizeProperty="maximize"]:pressed { image: url(:/White/maximizePressed); }
QPushButton#maximizeButton[maximizeProperty="restore"] { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/restoreHover); }
QPushButton#maximizeButton[maximizeProperty="restore"]:hover { image: url(:/White/restore); }
QPushButton#maximizeButton[maximizeProperty="restore"]:pressed { image: url(:/White/restorePressed); }
QPushButton#closeButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/closeHover); }
QPushButton#closeButton:hover { image: url(:/White/close); }
QPushButton#closeButton:pressed { image: url(:/White/closePressed); }
QPushButton#skinButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/skinHover); }
QPushButton#skinButton:hover { image: url(:/White/skin); }
QPushButton#skinButton:pressed { image: url(:/White/skinPressed); }
QPushButton#feedbackButton { border-radius: none; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; background: rgb(120, 170, 220); image: url(:/White/feedbackHover); }
QPushButton#feedbackButton:hover { image: url(:/White/feedback); }
QPushButton#feedbackButton:pressed { image: url(:/White/feedbackPressed); }
QPushButton#closeTipButton { border-radius: none; border-image: url(:/White/close); background: transparent; }
QPushButton#closeTipButton:hover { border-image: url(:/White/closeHover); }
QPushButton#closeTipButton:pressed { border-image: url(:/White/closePressed); }
QPushButton#changeSkinButton{ border-radius: 4px; border: 2px solid rgb(111, 156, 207); background: rgb(204, 227, 252); }
QPushButton#changeSkinButton:hover{ border-color: rgb(60, 150, 200); }
QPushButton#changeSkinButton:pressed, QPushButton#changeSkinButton:checked{ border-color: rgb(0, 160, 230); }
QPushButton#transferButton { padding-left: 5px; padding-right: 5px; color: white; background: rgb(0, 78, 161); }
QPushButton#transferButton:hover { background: rgb(2, 65, 132); }
QPushButton#transferButton:pressed { background: rgb(6, 94, 187); }
QPushButton#transferButton[iconProperty="left"] { qproperty-icon: url(:/White/left); }
QPushButton#transferButton[iconProperty="right"] { qproperty-icon: url(:/White/right); }
QPushButton#openButton { border-radius: none; image: url(:/White/open); background: transparent; }
QPushButton#openButton:hover { image: url(:/White/openHover); }
QPushButton#openButton:pressed { image: url(:/White/openPressed); }
QPushButton#deleteButton { border-radius: none; image: url(:/White/delete); background: transparent; }
QPushButton#deleteButton:hover { image: url(:/White/deleteHover); }
QPushButton#deleteButton:pressed { image: url(:/White/deletePressed); }
QPushButton#menuButton { text-align: left center; padding-left: 3px; color: rgb(84, 84, 84); border: 1px solid rgb(111, 156, 207); background: white; }
QPushButton#menuButton::menu-indicator{ subcontrol-position: right center; subcontrol-origin: padding; image: url(:/White/arrowBottom); padding-right: 3px; }

1
qss/icon/1-最大化.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580369534607" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3686" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M444.3 539.9L202 782.2 199.8 563c0-16.5-13.5-30-30-30s-30 13.5-30 30l2.2 285.1c0 8.8 3.8 16.7 9.8 22.2 5.5 6 13.4 9.8 22.2 9.8h295.6c16.5 0 30-13.5 30-30s-13.5-30-30-30H248.9l237.8-237.8c11.7-11.7 11.7-30.8 0-42.4-11.6-11.6-30.7-11.6-42.4 0zM578.1 488l242.3-242.3 2.2 219.2c0 16.5 13.5 30 30 30s30-13.5 30-30l-2.2-285.1c0-8.8-3.8-16.7-9.8-22.2-5.5-6-13.4-9.8-22.2-9.8H552.8c-16.5 0-30 13.5-30 30s13.5 30 30 30h220.7L535.7 445.6c-11.7 11.7-11.7 30.8 0 42.4 11.7 11.7 30.8 11.7 42.4 0z" p-id="3687" fill="#ffffff"></path></svg>

After

Width:  |  Height:  |  Size: 902 B

BIN
qss/icon/Thumbs.db Normal file

Binary file not shown.

BIN
qss/icon/action_config.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

1
qss/icon/array.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1606632646518" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8424" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M128 213.333333C128 166.4 166.4 128 213.333333 128L810.666667 128C857.6 128 896 166.4 896 213.333333L896 810.666667C896 857.6 857.6 896 810.666667 896L213.333333 896C165.973333 896 128 857.6 128 810.666667L128 213.333333M256 256 256 768 426.666667 768 426.666667 682.666667 341.333333 682.666667 341.333333 341.333333 426.666667 341.333333 426.666667 256 256 256M682.666667 682.666667 597.333333 682.666667 597.333333 768 768 768 768 256 597.333333 256 597.333333 341.333333 682.666667 341.333333 682.666667 682.666667Z" p-id="8425"></path></svg>

After

Width:  |  Height:  |  Size: 923 B

1
qss/icon/boolean.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1606630428606" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7152" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960 1024H64a64 64 0 0 1-64-64V64a64 64 0 0 1 64-64h896a64 64 0 0 1 64 64v896a64 64 0 0 1-64 64zM896 192a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V192z m-512 512L192 448h128l126.464 168.576L704 256h128l-320 448H384z" p-id="7153"></path></svg>

After

Width:  |  Height:  |  Size: 661 B

BIN
qss/icon/btn_close_down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580641292734" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2118" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M670.4 308.352 512 466.752l-158.4-158.4c-12.512-12.512-32.768-12.512-45.248 0s-12.512 32.768 0 45.248l158.4 158.4-158.4 158.4c-12.512 12.512-12.512 32.768 0 45.248 12.48 12.48 32.768 12.512 45.248 0l158.4-158.4 158.4 158.4c12.48 12.48 32.768 12.512 45.248 0 12.512-12.512 12.48-32.768 0-45.248L557.248 512l158.4-158.4c12.512-12.512 12.48-32.768 0-45.248C703.136 295.84 682.88 295.84 670.4 308.352z" p-id="2119" fill="#e6e6e6"></path></svg>

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
qss/icon/btn_data.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
qss/icon/btn_max_down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
qss/icon/btn_max_normal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580641360656" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2752" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M512 1255.489906" p-id="2753" fill="#e6e6e6"></path><path d="M865.682191 310.085948l-554.675195 0c-14.634419 0-26.403358 11.973616-26.403358 26.710374L284.603638 423.681791l-92.309414 0c-14.634419 0-26.403358 11.973616-26.403358 26.710374l0 349.998001c0 14.634419 11.768939 26.505697 26.403358 26.505697l554.675195 0c14.634419 0 26.710374-11.871277 26.710374-26.505697L773.679792 713.30002l92.002399 0c14.634419 0 26.710374-11.871277 26.710374-26.505697l0-349.998001C892.392564 322.059564 880.31661 310.085948 865.682191 310.085948zM728.65081 781.86688 210.817509 781.86688 210.817509 468.710774l517.8333 0L728.65081 781.86688zM847.363582 668.271037l-73.68379 0L773.679792 450.392165c0-14.634419-12.075954-26.710374-26.710374-26.710374L329.530282 423.681791l0-68.56686 517.8333 0L847.363582 668.271037z" p-id="2754" fill="#e6e6e6"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
qss/icon/btn_mini_down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580642261924" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3432" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M784 80H240c-88 0-160 72-160 160v544c0 88 72 160 160 160h544c88 0 160-72 160-160V240c0-88-72-160-160-160z m96 704c0 52.8-43.2 96-96 96h-96v-96c0-52.8 43.2-96 96-96h96v96z m0-160h-96c-88 0-160 72-160 160v96H240c-52.8 0-96-43.2-96-96V240c0-52.8 43.2-96 96-96h544c52.8 0 96 43.2 96 96v384z" p-id="3433" fill="#e6e6e6"></path><path d="M560 336c-17.6 0-32 14.4-32 32v115.2L302.4 257.6c-12.8-12.8-32-12.8-44.8 0-12.8 12.8-12.8 32 0 44.8L483.2 528H368c-17.6 0-32 14.4-32 32s14.4 32 32 32h192c9.6 0 17.6-3.2 22.4-9.6 6.4-6.4 9.6-14.4 9.6-22.4V368c0-17.6-14.4-32-32-32z" p-id="3434" fill="#e6e6e6"></path></svg>

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566285509502" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1969" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M734.814692 691.402973 884.428198 691.402973 884.428198 77.888951 258.144338 77.888951 258.144338 284.1005 294.983361 284.1005 294.983361 118.847805 847.589175 118.847805 847.589175 650.443096 734.814692 650.443096Z" p-id="1970"></path><path d="M108.530832 284.1005l626.28386 0 0 613.515045-626.28386 0L108.530832 284.1005 108.530832 284.1005zM145.369855 325.060377l0 531.59529 552.605813 0L697.975668 325.060377 145.369855 325.060377z" p-id="1971"></path></svg>

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
qss/icon/btn_serial.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
qss/icon/charts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
qss/icon/check_box_p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
qss/icon/checkbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
qss/icon/checkbox_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
qss/icon/checkbox_p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
qss/icon/close_main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

1
qss/icon/code-array.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580818424312" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7832" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M128 213.333333a85.333333 85.333333 0 0 1 85.333333-85.333333h597.333334a85.333333 85.333333 0 0 1 85.333333 85.333333v597.333334a85.333333 85.333333 0 0 1-85.333333 85.333333H213.333333a85.333333 85.333333 0 0 1-85.333333-85.333333V213.333333m128 42.666667v512h170.666667v-85.333333H341.333333V341.333333h85.333334V256H256m426.666667 426.666667h-85.333334v85.333333h170.666667V256h-170.666667v85.333333h85.333334v341.333334z" fill="" p-id="7833"></path></svg>

After

Width:  |  Height:  |  Size: 835 B

BIN
qss/icon/combo_arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

1
qss/icon/dataflow.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1563782191748" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1982" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M524 1008c-8 0-16 0-24-0.8-105.6-6.4-202.4-52.8-272.8-132-64.8-72.8-100-166.4-100-264 0-90.4 22.4-185.6 65.6-281.6 4-8 12.8-12 20.8-8s12 12.8 8 20.8C180.8 435.2 160 525.6 160 611.2c0 89.6 32 176 92 242.4 64.8 72.8 153.6 116 250.4 121.6s190.4-26.4 263.2-91.2c6.4-5.6 16.8-5.6 22.4 1.6s5.6 16.8-1.6 22.4c-72.8 64.8-164.8 100-262.4 100z m359.2-256.8c-1.6 0-3.2 0-4.8-0.8-8-3.2-12.8-12-9.6-20 12.8-38.4 20-78.4 20-119.2C888 399.2 717.6 48 524 48c-70.4 0-129.6 35.2-191.2 113.6-5.6 7.2-15.2 8-22.4 2.4-7.2-5.6-8-15.2-2.4-22.4C375.2 56 444 16 524 16 752.8 16 920 407.2 920 611.2c0 44-7.2 88-21.6 129.6-2.4 6.4-8 10.4-15.2 10.4z" fill="#27B1BD" p-id="1983"></path><path d="M532 836.8C388.8 836.8 272 720 272 576.8 272 436.8 440 184 532 184 621.6 184 792 440.8 792 576.8c0 143.2-116.8 260-260 260z m0-620.8C470.4 216 304 439.2 304 576.8c0 125.6 102.4 228 228 228S760 702.4 760 576.8C760 443.2 592 216 532 216zM272 336c-48.8 0-88-39.2-88-88s39.2-88 88-88 88 39.2 88 88-39.2 88-88 88z m0-144c-31.2 0-56 24.8-56 56s24.8 56 56 56 56-24.8 56-56-24.8-56-56-56z" fill="#27B1BD" p-id="1984"></path><path d="M630.4 523.2c42.4 56.8 30.4 136.8-26.4 179.2s-136.8 30.4-179.2-26.4c-23.2-31.2-35.2-70.4-25.6-108m0.8 0c21.6-2.4 54.4 20.8 80 16 90.4-16 101.6-60.8 150.4-60.8" fill="#53DBEA" p-id="1985"></path><path d="M842.4 893.6c-41.6 0-75.2-33.6-75.2-75.2s33.6-75.2 75.2-75.2 75.2 33.6 75.2 75.2c-0.8 41.6-34.4 75.2-75.2 75.2z m0-117.6c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2-20-43.2-43.2-43.2z" fill="#27B1BD" p-id="1986"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
qss/icon/downarrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

BIN
qss/icon/int.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

1
qss/icon/int.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1606629528256" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6317" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M332.799002 686.081014m-332.799002 0a332.799002 332.799002 0 1 0 665.598003 0 332.799002 332.799002 0 1 0-665.598003 0Z" fill="#D3EFDE" p-id="6318"></path><path d="M883.19735 1024h-639.99808A141.055577 141.055577 0 0 1 102.399693 883.200422v-742.397772A141.055577 141.055577 0 0 1 243.19927 0.003072h516.350451a89.087733 89.087733 0 0 1 63.231811 25.599923l189.695431 189.695431A38.399885 38.399885 0 0 1 1023.996928 243.202342v639.99808a141.055577 141.055577 0 0 1-140.799578 140.799578zM243.19927 76.802842A63.999808 63.999808 0 0 0 179.199462 140.80265v742.397772A63.999808 63.999808 0 0 0 243.19927 947.20023h639.99808a63.999808 63.999808 0 0 0 63.999808-63.999808V259.074295l-179.199462-179.199463a12.799962 12.799962 0 0 0-8.447975-3.07199z" fill="#434260" p-id="6319"></path><path d="M332.799002 399.105875h35.583893v226.047322H332.799002zM428.798714 399.105875h36.60789l75.007775 132.607602 22.783931 47.871856h1.535996c-1.791995-23.29593-4.607986-51.199846-4.607986-75.263774v-105.215684h33.791898v226.047322h-35.839892l-75.007775-133.3756-22.271933-47.359858h-1.535996c1.791995 23.29593 4.607986 49.407852 4.607986 73.983778v106.49568h-35.071894zM700.413899 428.801786h-66.303801v-29.695911h168.447494v29.695911h-66.5598v196.095411h-35.583893z" fill="#434260" p-id="6320"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
qss/icon/key.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580815694677" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4835" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M490.208 193.088l33.568 0 0 134.272-33.568 0 0-134.272z" p-id="4836" fill="#000000"></path><path d="M741.952 293.792c0-129.792-105.216-234.976-234.976-234.976-129.792 0-234.976 105.184-234.976 234.976 0 99.936 62.528 185.12 150.528 219.072l0 452.288 167.84 0 0-116.96 50.88-50.88-50.88-50.88 0-66.08 84.448-84.448-83.136-83.136c87.84-34.016 150.272-119.136 150.272-218.976zM579.552 481.472l-22.752 8.8 0 35.104 70.496 70.56-70.528 70.528 0 93.888 36.96 36.992-36.96 36.992 0 97.312-100.704 0 0-441.76-21.504-8.288c-78.368-30.24-129.024-103.904-129.024-187.744 0-111.072 90.336-201.408 201.408-201.408 111.04 0 201.408 90.336 201.408 201.408 0 83.712-50.592 157.376-128.832 187.68z" p-id="4837" fill="#000000"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
qss/icon/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

1
qss/icon/missing.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580818580570" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8091" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M341.333333 426.666667a42.666667 42.666667 0 1 1-85.333333 0 42.666667 42.666667 0 0 1 85.333333 0z m170.666667 0a42.666667 42.666667 0 1 1-85.333333 0 42.666667 42.666667 0 0 1 85.333333 0z m256 426.666666a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334z m42.666667-384c70.570667 0 128 57.429333 128 128s-57.429333 128-128 128v42.666667a42.666667 42.666667 0 0 1-85.333334 0v-85.333333a42.666667 42.666667 0 0 1 42.666667-42.666667h42.666667c23.509333 0 42.666667-19.157333 42.666666-42.666667 0-23.509333-19.157333-42.666667-42.666666-42.666666h-42.666667c-23.509333 0-42.666667 19.157333-42.666667 42.666666a42.666667 42.666667 0 0 1-85.333333 0c0-70.570667 57.429333-128 128-128h42.666667z m-128-42.666666a42.666667 42.666667 0 0 1-85.333334 0c0-30.72-6.656-60.501333-19.2-87.722667A125.44 125.44 0 0 1 554.666667 341.333333a127.872 127.872 0 0 1-127.488-123.008 211.797333 211.797333 0 0 0-86.357334 0A127.872 127.872 0 0 1 213.333333 341.333333a125.44 125.44 0 0 1-23.466666-2.389333A209.152 209.152 0 0 0 170.666667 426.666667v298.666666h384a42.666667 42.666667 0 0 1 0 85.333334H128a42.666667 42.666667 0 0 1-42.666667-42.666667v-341.333333c0-46.037333 10.794667-90.538667 30.890667-130.944A126.72 126.72 0 0 1 85.333333 213.333333V170.666667c0-47.061333 38.272-85.333333 85.333334-85.333334h128a42.666667 42.666667 0 0 1 42.666666 42.666667v3.712a300.928 300.928 0 0 1 85.333334 0V128a42.666667 42.666667 0 0 1 42.666666-42.666667h128c47.061333 0 85.333333 38.272 85.333334 85.333334v42.666666a126.72 126.72 0 0 1-30.890667 82.389334c20.096 40.405333 30.890667 84.906667 30.890667 130.944z m-341.333334 170.666666a42.666667 42.666667 0 0 1 0-85.333333h85.333334a42.666667 42.666667 0 0 1 0 85.333333 42.666667 42.666667 0 0 1-85.333334 0z m170.666667-384c0 23.509333 19.157333 42.666667 42.666667 42.666667 23.509333 0 42.666667-19.157333 42.666666-42.666667V170.666667h-85.333333v42.666666zM256 213.333333V170.666667H170.666667v42.666666c0 23.509333 19.157333 42.666667 42.666666 42.666667 23.509333 0 42.666667-19.157333 42.666667-42.666667z" fill="#000000" p-id="8092"></path></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

1
qss/icon/objects.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1606632592168" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7960" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M341.333333 725.333333 42.666667 725.333333c-25.6 0-42.666667-17.066667-42.666667-42.666667L0 42.666667c0-25.6 17.066667-42.666667 42.666667-42.666667l640 0c25.6 0 42.666667 17.066667 42.666667 42.666667l0 298.666667c0 25.6-17.066667 42.666667-42.666667 42.666667s-42.666667-17.066667-42.666667-42.666667L640 85.333333 85.333333 85.333333l0 554.666667 256 0c25.6 0 42.666667 17.066667 42.666667 42.666667S366.933333 725.333333 341.333333 725.333333z" p-id="7961"></path><path d="M981.333333 1024 341.333333 1024c-25.6 0-42.666667-17.066667-42.666667-42.666667L298.666667 341.333333c0-25.6 17.066667-42.666667 42.666667-42.666667l640 0c25.6 0 42.666667 17.066667 42.666667 42.666667l0 640C1024 1006.933333 1006.933333 1024 981.333333 1024zM384 938.666667l554.666667 0L938.666667 384 384 384 384 938.666667z" p-id="7962"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
qss/icon/radio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
qss/icon/radio_h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
qss/icon/radio_p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
qss/icon/sizegrip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

1
qss/icon/string.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580818387282" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6755" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css"></style></defs><path d="M391.68 561.792c0 24.96-6.464 47.36-19.264 67.264-12.864 19.904-31.68 35.392-56.384 46.656s-54.08 16.896-88 16.896c-40.704 0-74.24-7.616-100.672-22.976-18.752-11.072-33.984-25.856-45.696-44.288C69.824 606.72 64 588.8 64 571.392 64 561.28 67.52 552.576 74.56 545.344c7.04-7.232 16-10.816 26.88-10.816 8.832 0 16.256 2.752 22.4 8.384C129.856 548.544 135.04 556.928 139.392 568 144.64 581.12 150.272 592.128 156.416 600.96c6.08 8.832 14.656 16.064 25.728 21.76 11.072 5.76 25.6 8.64 43.584 8.64 24.768 0 44.864-5.824 60.288-17.344 15.488-11.584 23.232-25.92 23.232-43.2 0-13.696-4.16-24.832-12.544-33.344-8.32-8.576-19.136-15.04-32.32-19.584-13.248-4.48-30.912-9.28-53.056-14.4C181.76 496.704 156.992 488.576 136.96 479.232c-19.968-9.28-35.84-21.952-47.488-37.952C77.696 425.28 71.872 405.376 71.872 381.568c0-22.656 6.208-42.88 18.56-60.48s30.272-31.168 53.696-40.64c23.424-9.472 51.008-14.272 82.688-14.272 25.344 0 47.168 3.2 65.664 9.408 18.432 6.336 33.792 14.656 45.952 25.088 12.16 10.368 21.12 21.312 26.688 32.768s8.448 22.656 8.448 33.472c0 9.92-3.52 18.88-10.56 26.816C356.096 401.728 347.328 405.696 336.832 405.696c-9.536 0-16.832-2.368-21.76-7.104C310.016 393.728 304.64 385.92 298.816 375.04 291.328 359.488 282.368 347.392 271.872 338.624 261.312 329.92 244.48 325.568 221.248 325.568c-21.568 0-38.912 4.736-52.16 14.208-13.184 9.472-19.84 20.864-19.84 34.176 0 8.256 2.24 15.36 6.72 21.376s10.688 11.2 18.56 15.488 15.872 7.68 23.936 10.112 21.376 6.016 39.936 10.624c23.232 5.504 44.288 11.52 63.168 17.984 18.816 6.656 34.88 14.592 48.064 23.936C362.816 482.88 373.12 494.72 380.544 509.056 387.968 523.456 391.68 540.992 391.68 561.792zM449.856 387.2l8.448 0L458.304 341.056c0-12.352 0.32-22.144 1.024-29.12 0.64-7.04 2.496-13.12 5.44-18.112 3.008-5.248 7.296-9.536 12.928-12.8C483.328 277.696 489.6 276.032 496.576 276.032c9.728 0 18.56 3.648 26.432 11.008 5.248 4.864 8.64 10.816 9.984 17.792C534.4 311.936 535.104 321.92 535.104 334.784L535.104 387.2l28.096 0c10.88 0 19.136 2.56 24.896 7.68 5.76 5.184 8.64 11.84 8.64 19.84 0 10.368-4.096 17.536-12.224 21.696S564.608 442.56 549.504 442.56L535.104 442.56l0 141.184c0 12.032 0.384 21.248 1.28 27.712C537.28 617.92 539.52 623.168 543.104 627.2c3.648 4.032 9.6 6.08 17.856 6.08 4.48 0 10.624-0.832 18.24-2.368 7.744-1.6 13.76-2.432 17.984-2.432 6.272 0 11.776 2.496 16.768 7.488 4.992 4.928 7.488 11.136 7.488 18.368 0 12.352-6.72 21.888-20.224 28.416s-33.024 9.792-58.24 9.792c-24 0-42.24-3.968-54.592-12.032s-20.48-19.2-24.32-33.408-5.76-33.344-5.76-57.152L458.304 442.56 448.192 442.56c-11.072 0-19.52-2.624-25.344-7.872S414.144 422.784 414.144 414.656c0-8 3.008-14.656 9.152-19.84C429.376 389.76 438.272 387.2 449.856 387.2zM725.76 581.824l0 64.128c0 15.552-3.648 27.2-10.88 35.008-7.36 7.744-16.64 11.648-27.904 11.648-11.136 0-20.096-3.904-27.264-11.776s-10.752-19.52-10.752-34.88l0-213.76c0-34.496 12.48-51.776 37.376-51.776 12.736 0 22.016 3.968 27.648 12.032s4.864 16.192 5.504 31.936c9.152-15.744 22.4-23.872 32-31.936s22.656-12.032 38.72-12.032 31.744 3.968 46.848 12.032c15.232 8.064 22.848 18.752 22.848 32.064 0 9.344-3.264 17.152-9.728 23.168-6.528 6.144-13.504 9.216-20.992 9.216-2.752 0-9.6-1.728-20.352-5.248-10.752-3.456-20.224-5.184-28.48-5.184-11.264 0-20.48 2.944-27.648 8.896-7.104 5.888-12.608 14.656-16.512 26.304-3.968 11.648-6.72 25.408-8.256 41.408C726.528 539.2 725.76 558.656 725.76 581.824zM881.344 607.936c-26.496 0-48 21.568-48 48 0 26.496 21.504 48.064 48 48.064s48-21.568 48-48.064C929.344 629.504 907.904 607.936 881.344 607.936z" p-id="6756"></path></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

1
qss/icon/关闭.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580369499637" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2832" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M503.466667 467.285333l319.829333-319.829333a25.6 25.6 0 1 1 36.181333 36.181333l-319.829333 319.829334 319.829333 319.829333a25.6 25.6 0 1 1-36.181333 36.181333l-319.829333-319.829333-319.829334 319.829333a25.6 25.6 0 1 1-36.181333-36.181333l319.829333-319.829333-319.829333-319.829334a25.6 25.6 0 1 1 36.181333-36.181333l319.829334 319.829333z" p-id="2833" fill="#ffffff"></path></svg>

After

Width:  |  Height:  |  Size: 764 B

1
qss/icon/最小化.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1580369518247" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3279" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M98.23 451.003l829.685-1.992 0.154 64-829.685 1.992z" fill="#ffffff" p-id="3280"></path></svg>

After

Width:  |  Height:  |  Size: 471 B

56
qss/qss.qrc Normal file
View File

@ -0,0 +1,56 @@
<RCC>
<qresource prefix="/qss">
<file>icon/btn_close_down.png</file>
<file>icon/btn_close_highlight.png</file>
<file>icon/btn_close_normal.png</file>
<file>icon/btn_max_down.png</file>
<file>icon/btn_max_highlight.png</file>
<file>icon/btn_max_normal.png</file>
<file>icon/btn_mini_down.png</file>
<file>icon/btn_mini_highlight.png</file>
<file>icon/btn_mini_normal.png</file>
<file>icon/btn_restore_down.png</file>
<file>icon/btn_restore_highlight.png</file>
<file>icon/btn_restore_normal.png</file>
<file>icon/checkbox.png</file>
<file>icon/checkbox_h.png</file>
<file>icon/checkbox_p.png</file>
<file>icon/downarrow.png</file>
<file>icon/hor_scroll_left_arrow.png</file>
<file>icon/hor_scroll_right_arrow.png</file>
<file>icon/radio.png</file>
<file>icon/radio_h.png</file>
<file>icon/radio_p.png</file>
<file>icon/ver_scroll_bottom_arrow.png</file>
<file>icon/ver_scroll_top_arrow.png</file>
<file>icon/sizegrip.png</file>
<file>css/qss.css</file>
<file>icon/btn_serial.png</file>
<file>css/white.css</file>
<file>css/dark.css</file>
<file>icon/btn_data.png</file>
<file>icon/dataflow.svg</file>
<file>icon/check_box_p.png</file>
<file>icon/combo_arrow.png</file>
<file>icon/charts.png</file>
<file>icon/btn_max_normal.svg</file>
<file>icon/btn_restore_down.svg</file>
<file>icon/btn_mini_down.svg</file>
<file>icon/btn_close_down.svg</file>
<file>icon/close_main.png</file>
<file>icon/logo.png</file>
<file>icon/key.svg</file>
<file>icon/action_config.png</file>
<file>icon/int.svg</file>
<file>icon/objects.svg</file>
<file>icon/string.svg</file>
<file>icon/missing.svg</file>
<file>css/QssMainWindow.css</file>
<file>css/QssTitleBar.css</file>
<file>css/corrugation_form.css</file>
<file>css/vibration_comparison_form.css</file>
<file>css/mainwindow.css</file>
<file>css/basic.css</file>
<file>css/save_data_form.css</file>
</qresource>
</RCC>

View File

@ -136,3 +136,6 @@ qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
qss/qss.qrc

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 11.0.3, 2023-11-29T00:51:06. -->
<!-- Written by QtCreator 11.0.3, 2023-12-11T00:40:13. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>