添加音频采集
3
main.cpp
|
@ -34,6 +34,9 @@ int main(int argc, char *argv[])
|
||||||
ScreenCapture p;
|
ScreenCapture p;
|
||||||
p.EnumScreen();
|
p.EnumScreen();
|
||||||
|
|
||||||
|
SYSTEMTIME st;
|
||||||
|
GetSystemTime(&st);
|
||||||
|
|
||||||
Direct3D9TakeScreenshots(0,4);
|
Direct3D9TakeScreenshots(0,4);
|
||||||
QssEventFilter filter;
|
QssEventFilter filter;
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
|
@ -38,7 +38,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
qDebug()<<"capture "<<mMic.size()<<"mic";
|
qDebug()<<"capture "<<mMic.size()<<"mic";
|
||||||
for(vector<CaptureAudioFfmpeg::MICInfo>::iterator itr = mMic.begin();itr != mMic.end();itr++){
|
for(vector<CaptureAudioFfmpeg::MICInfo>::iterator itr = mMic.begin();itr != mMic.end();itr++){
|
||||||
qDebug()<<QString::fromStdWString(itr->name)<<itr->index;
|
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);
|
mTimer = new QTimer(this);
|
||||||
|
@ -57,7 +58,6 @@ void MainWindow::on_pushButton_clicked(){
|
||||||
}
|
}
|
||||||
if(!m_bCameraOpen){
|
if(!m_bCameraOpen){
|
||||||
mPlayerWidget->SetDataType(CPlayWidget::IMG_TYPE::TYPE_RGB32);
|
mPlayerWidget->SetDataType(CPlayWidget::IMG_TYPE::TYPE_RGB32);
|
||||||
mPlayerWidget->SetImgSize(640,480);
|
|
||||||
|
|
||||||
qDebug()<<ui->comboBox->currentText().size()<<ui->comboBox->currentText();
|
qDebug()<<ui->comboBox->currentText().size()<<ui->comboBox->currentText();
|
||||||
wchar_t *opencamera = new wchar_t[ui->comboBox->currentText().size()];
|
wchar_t *opencamera = new wchar_t[ui->comboBox->currentText().size()];
|
||||||
|
@ -66,6 +66,9 @@ void MainWindow::on_pushButton_clicked(){
|
||||||
if(nullptr == mCamera){
|
if(nullptr == mCamera){
|
||||||
this->mCamera = new Camera(ss);
|
this->mCamera = new Camera(ss);
|
||||||
}
|
}
|
||||||
|
GUIDToAvFormat(mCamera->MediaType());
|
||||||
|
mPlayerWidget->SetImgSize(mCamera->GetWidth(),mCamera->GetHeight());
|
||||||
|
|
||||||
this->mCamera->SetObserver(mPlayerWidget);
|
this->mCamera->SetObserver(mPlayerWidget);
|
||||||
qDebug()<<ui->comboBox->currentText();
|
qDebug()<<ui->comboBox->currentText();
|
||||||
ui->pushButton->setText("关闭摄像头");
|
ui->pushButton->setText("关闭摄像头");
|
||||||
|
@ -104,7 +107,7 @@ void MainWindow::on_pushButton_2_clicked()
|
||||||
if (!mPusher->IfConnect()) {
|
if (!mPusher->IfConnect()) {
|
||||||
const char* address = ui->lineEdit->text().toLocal8Bit().data();
|
const char* address = ui->lineEdit->text().toLocal8Bit().data();
|
||||||
qDebug()<<address;
|
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());
|
ToastWidget::showTip("已经连接上RTMP服务器",this->parentWidget());
|
||||||
mVideoCoder->SetOberver(mPusher);
|
mVideoCoder->SetOberver(mPusher);
|
||||||
mPusher->StartPush();
|
mPusher->StartPush();
|
||||||
|
@ -128,6 +131,12 @@ void MainWindow::on_pushButton_2_clicked()
|
||||||
void MainWindow::on_pushButton_3_clicked()
|
void MainWindow::on_pushButton_3_clicked()
|
||||||
{
|
{
|
||||||
qDebug()<<ui->comboBox_2->currentText();
|
qDebug()<<ui->comboBox_2->currentText();
|
||||||
|
wchar_t ptr[200];
|
||||||
|
|
||||||
|
ui->comboBox_2->currentText().toWCharArray(ptr);
|
||||||
|
|
||||||
|
mAudioCapture->InitCapture(ptr,4800,2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::DetectDpi()
|
void MainWindow::DetectDpi()
|
||||||
|
|
|
@ -305,7 +305,6 @@ bool Camera::Open(std::wstring &camera_name)
|
||||||
}
|
}
|
||||||
mediaType.formattype = FORMAT_VideoInfo;
|
mediaType.formattype = FORMAT_VideoInfo;
|
||||||
hr = mSampGrabber->SetMediaType(&mediaType);
|
hr = mSampGrabber->SetMediaType(&mediaType);
|
||||||
// 意味着最后的数据是丢掉的
|
|
||||||
CHECK_HR(CoCreateInstance(CLSID_NullRenderer, nullptr, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)(&dest_filter)));
|
CHECK_HR(CoCreateInstance(CLSID_NullRenderer, nullptr, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)(&dest_filter)));
|
||||||
mGraphBuilder->AddFilter(dest_filter, L"nullptrRenderer");
|
mGraphBuilder->AddFilter(dest_filter, L"nullptrRenderer");
|
||||||
|
|
||||||
|
@ -415,6 +414,9 @@ HRESULT STDMETHODCALLTYPE Camera::SampleGrabberCallback::BufferCB(double Time, B
|
||||||
fwrite(pBuffer,BufferLen,1,p);
|
fwrite(pBuffer,BufferLen,1,p);
|
||||||
fflush(p);
|
fflush(p);
|
||||||
#endif
|
#endif
|
||||||
|
if(0 == pBuffer){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mObserver.size() > 0) {
|
if (mObserver.size() > 0) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "RtmpPusher.h"
|
#include "RtmpPusher.h"
|
||||||
|
#include <sys/timeb.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化winsock
|
* 初始化winsock
|
||||||
|
@ -126,6 +127,9 @@ int RtmpPusher::SendPacket(unsigned int nPacketType, unsigned char * data,
|
||||||
int RtmpPusher::SendVideoPacket(unsigned int nPacketType,
|
int RtmpPusher::SendVideoPacket(unsigned int nPacketType,
|
||||||
unsigned char * data, unsigned int size, unsigned int nTimestamp)
|
unsigned char * data, unsigned int size, unsigned int nTimestamp)
|
||||||
{
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
GetSystemTime(&st);
|
||||||
|
qDebug()<<QString::asprintf("send tps%ld\n", st.wMilliseconds);
|
||||||
|
|
||||||
RTMPPacket* packet;
|
RTMPPacket* packet;
|
||||||
/*分配包内存和初始化,len为包体长度*/
|
/*分配包内存和初始化,len为包体长度*/
|
||||||
|
@ -210,8 +214,16 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
|
||||||
uint32_t size = 0;
|
uint32_t size = 0;
|
||||||
static uint32_t time = 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){
|
if(0 == mStartTime){
|
||||||
mStartTime = RTMP_GetTime();
|
mStartTime = ttt;
|
||||||
}
|
}
|
||||||
if (nullptr == data) {
|
if (nullptr == data) {
|
||||||
return -1;
|
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))) {
|
&& ((data[i + 2] == 0x00) && (data[i + 3] == 0x01) || (data[i + 2] == 0x01))) {
|
||||||
if ((nalhead == nullptr) && (i == 0) ) {
|
if ((nalhead == nullptr) && (i == 0) ) {
|
||||||
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x41)) { //p 帧直接发
|
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x41)) { //p 帧直接发
|
||||||
time += 100;
|
time += 60;
|
||||||
|
|
||||||
nalhead = data;
|
nalhead = data;
|
||||||
naltail = data + (len);
|
naltail = data + (len);
|
||||||
size = naltail - nalhead;
|
size = naltail - nalhead;
|
||||||
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
|
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//sps 帧进行解包
|
//sps 帧进行解包
|
||||||
|
@ -244,22 +256,22 @@ int H264RtmpPuser::sortAndSendNal(uint8_t * data, int len)
|
||||||
else {
|
else {
|
||||||
// i frame
|
// i frame
|
||||||
if ((data[i + 2] == 0x01) && (data[i + 3] == 0x65)) {
|
if ((data[i + 2] == 0x01) && (data[i + 3] == 0x65)) {
|
||||||
time += 100;
|
time += 60;
|
||||||
|
|
||||||
naltail = data + i;
|
naltail = data + i;
|
||||||
size = naltail - nalhead;
|
size = naltail - nalhead;
|
||||||
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
|
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
|
||||||
nalhead = data + i;
|
nalhead = data + i;
|
||||||
naltail = data + (len);
|
naltail = data + (len);
|
||||||
size = naltail - nalhead;
|
size = naltail - nalhead;
|
||||||
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
|
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//pps
|
//pps
|
||||||
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x68)) { // sps or pps or sei
|
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x68)) { // sps or pps or sei
|
||||||
naltail = data + i;
|
naltail = data + i;
|
||||||
size = naltail - nalhead;
|
size = naltail - nalhead;
|
||||||
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
|
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
|
||||||
nalhead = data + i;
|
nalhead = data + i;
|
||||||
i += 3;
|
i += 3;
|
||||||
}//sps
|
}//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
|
if ((data[i + 3] == 0x01) && (data[i + 4] == 0x06)) { // sps or pps or sei
|
||||||
naltail = data + i;
|
naltail = data + i;
|
||||||
size = naltail - nalhead;
|
size = naltail - nalhead;
|
||||||
this->SendH264Packet(nalhead, size, 0, time - mStartTime);
|
this->SendH264Packet(nalhead, size, 0, ttt - mStartTime);
|
||||||
nalhead = data + i;
|
nalhead = data + i;
|
||||||
i += 3;
|
i += 3;
|
||||||
}
|
}
|
||||||
|
@ -528,6 +540,7 @@ void H264RtmpPuser::ProcessSend()
|
||||||
{
|
{
|
||||||
while (this->mIfStart) {
|
while (this->mIfStart) {
|
||||||
int len = mPack.size();
|
int len = mPack.size();
|
||||||
|
qDebug()<<"unsend size"<<len;
|
||||||
if (!mPack.empty()) {
|
if (!mPack.empty()) {
|
||||||
mMux.lock();
|
mMux.lock();
|
||||||
Buffer buf = mPack.front();
|
Buffer buf = mPack.front();
|
||||||
|
@ -543,7 +556,7 @@ void H264RtmpPuser::ProcessSend()
|
||||||
}
|
}
|
||||||
free(buf.buf);
|
free(buf.buf);
|
||||||
}
|
}
|
||||||
msleep(10);
|
msleep(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,9 @@ extern "C" {
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include<iostream>
|
#include<iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define RTMP_HEAD_SIZE (sizeof(RTMPPacket)+RTMP_MAX_HEADER_SIZE)
|
#define RTMP_HEAD_SIZE (sizeof(RTMPPacket)+RTMP_MAX_HEADER_SIZE)
|
||||||
|
|
|
@ -20,6 +20,181 @@ int VideoCoder::SetDestPix(uint8_t width, uint8_t height) {
|
||||||
return 0;
|
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分割出了两路流,过滤器是操作的辅助流)
|
||||||
|
//配合使用crop:out_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):
|
VideoCoder::VideoCoder(int width, int height, AVPixelFormat formt):
|
||||||
mObserver(nullptr),
|
mObserver(nullptr),
|
||||||
mFrame(nullptr),
|
mFrame(nullptr),
|
||||||
|
@ -62,7 +237,7 @@ VideoCoder::VideoCoder(int width, int height, AVPixelFormat formt):
|
||||||
mCodecCtx->qmin = 10;
|
mCodecCtx->qmin = 10;
|
||||||
mCodecCtx->qmax = 25;
|
mCodecCtx->qmax = 25;
|
||||||
//mCodecCtx->flags |= AV_CODEC_FLAG_LOW_DELAY;
|
//mCodecCtx->flags |= AV_CODEC_FLAG_LOW_DELAY;
|
||||||
mCodecCtx->gop_size = 10;
|
mCodecCtx->gop_size = 25;
|
||||||
mCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
|
mCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||||
av_opt_set(mCodecCtx->priv_data, "preset", "superfast", 0);
|
av_opt_set(mCodecCtx->priv_data, "preset", "superfast", 0);
|
||||||
av_opt_set(mCodecCtx->priv_data, "tune", "zerolatency", 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);
|
ret = avcodec_encode_video2(mCodecCtx, &mAVPack, mFrame, &got_picture);
|
||||||
|
|
||||||
if (got_picture > 0) {
|
if (got_picture > 0) {
|
||||||
fwrite(mAVPack.data, 1, mAVPack.size, p);
|
// fwrite(mAVPack.data, 1, mAVPack.size, p);
|
||||||
fflush(p);
|
// fflush(p);
|
||||||
if(nullptr != this->mObserver)
|
if(nullptr != this->mObserver)
|
||||||
this->mObserver->OnGetCodeFrame(mAVPack.data, mAVPack.size);
|
this->mObserver->OnGetCodeFrame(mAVPack.data, mAVPack.size);
|
||||||
}
|
}
|
||||||
|
@ -140,6 +315,7 @@ void VideoCoder::Encode(uint8_t * src, int size, enum AVPixelFormat format) {
|
||||||
av_packet_unref(&mAVPack);
|
av_packet_unref(&mAVPack);
|
||||||
av_freep(&pFrame[0]);
|
av_freep(&pFrame[0]);
|
||||||
free(pFrame[0]);
|
free(pFrame[0]);
|
||||||
|
|
||||||
//av_freep(&mFrame->data[0]);
|
//av_freep(&mFrame->data[0]);
|
||||||
//av_freep(&mFrame->data[0]);
|
//av_freep(&mFrame->data[0]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,12 @@ extern "C"
|
||||||
#include "libswscale/swscale.h"
|
#include "libswscale/swscale.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
};
|
#include <libavfilter/avfilter.h>
|
||||||
|
#include <libavfilter/buffersink.h>
|
||||||
|
#include <libavfilter/buffersrc.h>
|
||||||
|
#include <libavutil/opt.h>
|
||||||
|
|
||||||
|
}
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#else
|
#else
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -61,6 +66,8 @@ public:
|
||||||
void SetOberver(VideoCodeObserver *p) {
|
void SetOberver(VideoCodeObserver *p) {
|
||||||
this->mObserver = p;
|
this->mObserver = p;
|
||||||
}
|
}
|
||||||
|
int Filter(int width, int height, unsigned char* rgbData, int bitsPerPixel);
|
||||||
|
|
||||||
void SetOutPutPixel(unsigned int width,unsigned int height);
|
void SetOutPutPixel(unsigned int width,unsigned int height);
|
||||||
private:
|
private:
|
||||||
int flushCoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
|
int flushCoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#include "audiocaptureff.h"
|
#include "audiocaptureff.h"
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <Qdebug>
|
||||||
|
#include <QTextCodec>
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
std::string WString2String(const std::wstring& ws)
|
std::string WString2String(const std::wstring& ws)
|
||||||
|
@ -16,6 +19,12 @@ std::string WString2String(const std::wstring& ws)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
int ThreadCapture(CaptureAudioFfmpeg*p){
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
vector<CaptureAudioFfmpeg::MICInfo> CaptureAudioFfmpeg::EnumSpeakers()
|
vector<CaptureAudioFfmpeg::MICInfo> CaptureAudioFfmpeg::EnumSpeakers()
|
||||||
{
|
{
|
||||||
vector<CaptureAudioFfmpeg::MICInfo> ret;
|
vector<CaptureAudioFfmpeg::MICInfo> ret;
|
||||||
|
@ -85,6 +94,8 @@ CaptureAudioFfmpeg::CaptureAudioFfmpeg(uint16_t rate, uint8_t channel)
|
||||||
{
|
{
|
||||||
mSampleRate = rate;
|
mSampleRate = rate;
|
||||||
mChanel = channel;
|
mChanel = channel;
|
||||||
|
mStatus = STOP;
|
||||||
|
mThread = nullptr;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,17 +110,28 @@ static char *dup_wchar_to_utf8(wchar_t *w)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
|
int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
|
||||||
{
|
{
|
||||||
string fileAudioInput = dup_wchar_to_utf8((wchar_t *)url.c_str());
|
av_register_all();
|
||||||
AVInputFormat* imft = av_find_input_format("dshow");
|
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;
|
AVDictionary *format_opts = nullptr;
|
||||||
av_dict_set_int(&format_opts, "audio_buffer_size", 20, 0);
|
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;
|
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");
|
printf("failed find stream info\n");
|
||||||
avformat_close_input(&mInfmt_ctx);
|
avformat_close_input(&mInfmt_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -121,96 +143,98 @@ int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
|
||||||
avformat_close_input(&mInfmt_ctx);
|
avformat_close_input(&mInfmt_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
//av_dump_format(infmt_ctx, 0, fileAudioInput.c_str(), 1);
|
|
||||||
//END输入文件
|
|
||||||
|
|
||||||
//打开解码器
|
// 不需要编码器
|
||||||
static AVCodec* decodec = avcodec_find_decoder(mInfmt_ctx->streams[0]->codec->codec_id);
|
// av_dump_format(mInfmt_ctx, 0, fileAudioInput.c_str(), 1);
|
||||||
if (!decodec) {
|
//END输入文件
|
||||||
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");
|
// static AVCodec* decodec = avcodec_find_decoder(mInfmt_ctx->streams[0]->codec->codec_id);
|
||||||
avformat_close_input(&mInfmt_ctx);
|
// if (!decodec) {
|
||||||
avcodec_free_context(&codec_ctx);
|
// printf("failed find decoder\n");
|
||||||
return -1;
|
// return -1;
|
||||||
}
|
// }
|
||||||
//END编码器
|
// if (0 > avcodec_open2(mInfmt_ctx->streams[0]->codec, decodec, NULL)) {
|
||||||
//输出文件
|
// printf("failed open decoder\n");
|
||||||
AVFormatContext* outfmt_ctx = NULL;
|
// return -1;
|
||||||
if (0 > avformat_alloc_output_context2(&outfmt_ctx, NULL, NULL, "aac.aac")) {
|
// }
|
||||||
printf("failed alloc outputcontext\n");
|
// //END解码器
|
||||||
avformat_close_input(&mInfmt_ctx);
|
// //重采样初始化
|
||||||
avcodec_free_context(&codec_ctx);
|
// initAudioFilters();
|
||||||
return -1;
|
// //END重采样初始化
|
||||||
}
|
// //编码器
|
||||||
AVStream* out_stream = avformat_new_stream(outfmt_ctx, codec_ctx->codec);
|
// static AVCodec* codec = NULL;
|
||||||
if (!out_stream) {
|
// //codec = avcodec_find_encoder_by_name("libmp3lame");
|
||||||
printf("failed new stream\n");
|
// codec = avcodec_find_encoder(AV_CODEC_ID_AAC);
|
||||||
avformat_close_input(&mInfmt_ctx);
|
// static AVCodecContext* codec_ctx = NULL;
|
||||||
avcodec_free_context(&codec_ctx);
|
// codec_ctx = avcodec_alloc_context3(codec);
|
||||||
avformat_close_input(&outfmt_ctx);
|
// // codec_ctx->bit_rate = 64000;
|
||||||
return -1;
|
// // inputContext->streams[0]->codec
|
||||||
}
|
// codec_ctx->codec = codec;
|
||||||
avcodec_copy_context(out_stream->codec, codec_ctx);
|
// codec_ctx->sample_rate = 48000;
|
||||||
// if (0 > avio_open(&outfmt_ctx->pb, "rtmp://localhost/testlive", AVIO_FLAG_WRITE)) {
|
// codec_ctx->channel_layout = 3;
|
||||||
if (0 > avio_open(&outfmt_ctx->pb, "aac.aac", AVIO_FLAG_WRITE)) {
|
// codec_ctx->channels = 2;
|
||||||
printf("failed to open outfile\n");
|
// //codec_ctx->frame_size = 1024;
|
||||||
avformat_close_input(&mInfmt_ctx);
|
// codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
|
||||||
avcodec_free_context(&codec_ctx);
|
// codec_ctx->codec_tag = 0;
|
||||||
avformat_close_input(&outfmt_ctx);
|
// codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
|
||||||
return -1;
|
|
||||||
}
|
// if (0 > avcodec_open2(codec_ctx, codec, NULL)) {
|
||||||
avformat_write_header(outfmt_ctx, NULL);
|
// printf("failed open coder\n");
|
||||||
//END输出文件
|
// avformat_close_input(&mInfmt_ctx);
|
||||||
#if 0
|
// avcodec_free_context(&codec_ctx);
|
||||||
AVFrame* Frame = av_frame_alloc();
|
// return -1;
|
||||||
Frame->nb_samples = codec_ctx->frame_size;
|
// }
|
||||||
Frame->format = codec_ctx->sample_fmt;
|
// //END编码器
|
||||||
Frame->channel_layout = codec_ctx->channel_layout;
|
// //输出文件
|
||||||
int size = av_samples_get_buffer_size(NULL, codec_ctx->channels, codec_ctx->frame_size,
|
// AVFormatContext* outfmt_ctx = NULL;
|
||||||
codec_ctx->sample_fmt, 1);
|
// if (0 > avformat_alloc_output_context2(&outfmt_ctx, NULL, NULL, "aac.aac")) {
|
||||||
uint8_t* frame_buf = (uint8_t *)av_malloc(size);
|
// printf("failed alloc outputcontext\n");
|
||||||
avcodec_fill_audio_frame(Frame, codec_ctx->channels, codec_ctx->sample_fmt, (const uint8_t*)frame_buf, size, 1);
|
// avformat_close_input(&mInfmt_ctx);
|
||||||
int64_t in_channel_layout = av_get_default_channel_layout(codec_ctx->channels);
|
// avcodec_free_context(&codec_ctx);
|
||||||
AVPacket pkt;
|
// return -1;
|
||||||
av_new_packet(&pkt, size);
|
// }
|
||||||
pkt.data = NULL;
|
// AVStream* out_stream = avformat_new_stream(outfmt_ctx, codec_ctx->codec);
|
||||||
int got_frame = -1;
|
// if (!out_stream) {
|
||||||
int delayedFrame = 0;
|
// printf("failed new stream\n");
|
||||||
static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2];
|
// avformat_close_input(&mInfmt_ctx);
|
||||||
int audioCount = 0;
|
// avcodec_free_context(&codec_ctx);
|
||||||
const uint8_t *indata[AV_NUM_DATA_POINTERS] = { 0 };
|
// avformat_close_input(&outfmt_ctx);
|
||||||
AVFrame* Frame1 = av_frame_alloc();
|
// return -1;
|
||||||
#endif
|
// }
|
||||||
int loop = 1;
|
// avcodec_copy_context(out_stream->codec, codec_ctx);
|
||||||
int delayedFrame = 0;
|
//// 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;
|
AVPacket packet;
|
||||||
av_init_packet(&packet);
|
av_init_packet(&packet);
|
||||||
packet.data = NULL;
|
packet.data = NULL;
|
||||||
|
@ -222,12 +246,19 @@ int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
|
||||||
|
|
||||||
AVFrame* pSrcAudioFrame = av_frame_alloc();
|
AVFrame* pSrcAudioFrame = av_frame_alloc();
|
||||||
int got_frame = 0;
|
int got_frame = 0;
|
||||||
|
const char *filename = "./audio.pcm";
|
||||||
|
|
||||||
|
// 文件操作
|
||||||
|
FILE *outfile = fopen(filename,"wb+");
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
av_read_frame(mInfmt_ctx, &packet);
|
int ret = av_read_frame(mInfmt_ctx, &packet);
|
||||||
loop++;
|
if (ret == 0) {
|
||||||
if (packet.stream_index == audio_index) {
|
qDebug()<<"recv pack"<<packet.size;
|
||||||
auto filterFrame = DecodeAudio(&packet, pSrcAudioFrame);
|
fwrite(packet.data, 1, packet.size, outfile);
|
||||||
|
fflush(outfile);
|
||||||
|
//auto filterFrame = DecodeAudio(&packet, pSrcAudioFrame);
|
||||||
|
/*
|
||||||
if (filterFrame) {
|
if (filterFrame) {
|
||||||
avcodec_encode_audio2(codec_ctx, &pkt, filterFrame, &got_frame);
|
avcodec_encode_audio2(codec_ctx, &pkt, filterFrame, &got_frame);
|
||||||
if (got_frame) {
|
if (got_frame) {
|
||||||
|
@ -250,20 +281,42 @@ int CaptureAudioFfmpeg::InitCapture(wstring url, uint16_t rate, uint8_t channel)
|
||||||
av_packet_unref(&pkt);
|
av_packet_unref(&pkt);
|
||||||
printf("no output frame\n");
|
printf("no output frame\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
} */
|
||||||
}
|
}
|
||||||
av_packet_unref(&packet);
|
av_packet_unref(&packet);
|
||||||
}
|
}
|
||||||
flush_encoder(outfmt_ctx, 0);
|
// flush_encoder(outfmt_ctx, 0);
|
||||||
av_write_trailer(outfmt_ctx);
|
// av_write_trailer(outfmt_ctx);
|
||||||
//av_free(Frame);
|
//av_free(Frame);
|
||||||
av_free(pSrcAudioFrame);
|
// av_free(pSrcAudioFrame);
|
||||||
avio_close(outfmt_ctx->pb);
|
// avio_close(outfmt_ctx->pb);
|
||||||
avformat_close_input(&mInfmt_ctx);
|
// avformat_close_input(&mInfmt_ctx);
|
||||||
//avformat_close_input(&outfmt_ctx);
|
//avformat_close_input(&outfmt_ctx);
|
||||||
return 0;
|
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()
|
int CaptureAudioFfmpeg::initAudioFilters()
|
||||||
{
|
{
|
||||||
char args[512];
|
char args[512];
|
||||||
|
@ -390,13 +443,16 @@ AVFrame *CaptureAudioFfmpeg::DecodeAudio(AVPacket *packet, AVFrame *pSrcAudioFra
|
||||||
auto length = avcodec_decode_audio4(codecContext, pSrcAudioFrame, &gotFrame, packet);
|
auto length = avcodec_decode_audio4(codecContext, pSrcAudioFrame, &gotFrame, packet);
|
||||||
if (length >= 0 && gotFrame != 0)
|
if (length >= 0 && gotFrame != 0)
|
||||||
{
|
{
|
||||||
if (av_buffersrc_add_frame_flags(mBuffersrcCtx, pSrcAudioFrame, AV_BUFFERSRC_FLAG_PUSH) < 0) {
|
int ret = av_buffersrc_add_frame_flags(mBuffersrcCtx, pSrcAudioFrame, AV_BUFFERSRC_FLAG_PUSH) ;
|
||||||
av_log(NULL, AV_LOG_ERROR, "buffe src add frame error!\n");
|
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;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
filtFrame = av_frame_alloc();
|
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)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
av_frame_free(&filtFrame);
|
av_frame_free(&filtFrame);
|
||||||
|
|
|
@ -51,17 +51,18 @@ public:
|
||||||
vector<CaptureAudioFfmpeg::MICInfo> EnumSpeakers();
|
vector<CaptureAudioFfmpeg::MICInfo> EnumSpeakers();
|
||||||
CaptureAudioFfmpeg(uint16_t rate, uint8_t channel);
|
CaptureAudioFfmpeg(uint16_t rate, uint8_t channel);
|
||||||
int InitCapture(wstring url,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();
|
~CaptureAudio();
|
||||||
int StartCapture();
|
|
||||||
void StopCapture();
|
void StopCapture();
|
||||||
int SetObserver(CaptureAudioObserver*);
|
|
||||||
int OnCallBack(const void* input, void* output, unsigned long frameCount);
|
int OnCallBack(const void* input, void* output, unsigned long frameCount);
|
||||||
void AddCnt(unsigned int x) {this->mSize += x;};
|
void AddCnt(unsigned int x) {this->mSize += x;};
|
||||||
*/
|
*/
|
||||||
private:
|
private:
|
||||||
std::thread mThread;
|
std::thread *mThread;
|
||||||
uint16_t mSampleRate; //采样率
|
uint16_t mSampleRate; //采样率
|
||||||
uint16_t mChanel; //通道号
|
uint16_t mChanel; //通道号
|
||||||
uint16_t mSamplefmt;
|
uint16_t mSamplefmt;
|
||||||
|
@ -80,6 +81,9 @@ private:
|
||||||
|
|
||||||
int flush_encoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
|
int flush_encoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
|
||||||
AVFrame *DecodeAudio(AVPacket* packet, AVFrame*pSrcAudioFrame);
|
AVFrame *DecodeAudio(AVPacket* packet, AVFrame*pSrcAudioFrame);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // AUDIOCAPTUREFF_H
|
#endif // AUDIOCAPTUREFF_H
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
QFrame#window {
|
||||||
|
border: 1px solid black;
|
||||||
|
font-style: normal;
|
||||||
|
background: rgb(239,242,245);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.*/
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
QWidget#save_data_form
|
||||||
|
{
|
||||||
|
background: "white";
|
||||||
|
border:1px solid black;
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
{
|
||||||
|
}
|
|
@ -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; }
|
|
@ -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 |
After Width: | Height: | Size: 384 B |
|
@ -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 |
|
@ -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 |
After Width: | Height: | Size: 43 KiB |
|
@ -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 |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 3.1 KiB |
|
@ -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 |
After Width: | Height: | Size: 42 KiB |
|
@ -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 |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 3.4 KiB |
|
@ -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 |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 8.5 KiB |
|
@ -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 |
After Width: | Height: | Size: 3.8 KiB |
|
@ -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 |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 248 B |
After Width: | Height: | Size: 191 B |
After Width: | Height: | Size: 6.5 KiB |
|
@ -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 |
|
@ -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 |
After Width: | Height: | Size: 955 B |
|
@ -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 |
|
@ -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 |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.9 KiB |
|
@ -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 |
After Width: | Height: | Size: 196 B |
After Width: | Height: | Size: 191 B |
|
@ -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 |
|
@ -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 |
|
@ -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>
|
|
@ -136,3 +136,6 @@ qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
!isEmpty(target.path): INSTALLS += target
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
qss/qss.qrc
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!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>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
|