diff --git a/rolekeeper/daemon.cpp b/rolekeeper/daemon.cpp new file mode 100644 index 0000000..54475fb --- /dev/null +++ b/rolekeeper/daemon.cpp @@ -0,0 +1,589 @@ +#include "daemon.h" + +#include + +#pragma comment (lib,"Advapi32.lib") + + +typedef struct +{ + uint16_t pid; + string process_name; +} RuningProcess; + +vector RangeProcess(); + +vector StripList(const char *in, const char *d) +{ + vector ret; + map pos; + vector pos_strip_continue; + int lastpos = -1; + + if ((nullptr == in) || (nullptr == d)) + { + return ret; + } + int len = strlen(in); + int sublen = strlen(d); + if (len <= 0) + return ret; + if (sublen <= 0) + return ret; + + for (int i = 0; i < (len - sublen + 1); i++) + { + bool found = true; + for (int j = 0; j < strlen(d); j++) + { + if (in[i + j] != d[j]) + { + found = false; + } + } + if (!found) + { + pos.insert(make_pair(i,true)); + i += sublen - 1; + continue; + } + } + if (pos.size() == 0) + { + ret.push_back(string(in)); + return ret; + } + bool started = true; + uint16_t startpos = 0; + uint16_t endpos = 0; + + for(int i = 0;i < len - 1;i++){ + + if(pos[i] == true){ + if(started){ + startpos = i; + started = false; + } + if((pos[i + sublen] != true)){ + endpos = i; + // std::cout< RangeProcess() +{ + + FILE *pstr; + + char cmd[128], buff[512], *p; + + vector ret; + + int iPID; + + int pidPosition = 1; + + int pInfoPosition = 7; + + memset(cmd, 0, sizeof(cmd)); + + sprintf(cmd, "ps "); + + pstr = popen(cmd, "r"); + + if (pstr == NULL) + { + + return ret; + } + + memset(buff, 0, sizeof(buff)); + + bool first = true; + + while (1) + { + + RuningProcess ins; + + fgets(buff, 512, pstr); + + if (first) + { + + first = false; + + continue; + } + + if (feof(pstr)) + + { + + break; + } + + auto trip = StripList(buff, " "); + + ins.pid = atoi(trip[0].c_str()); + + ins.process_name = trip[3]; + + ret.push_back(ins); + } + + pclose(pstr); + + return ret; +} + +#endif + +#ifdef _WIN32 + +static BOOL KillProcess(DWORD dwPid) + +{ + HANDLE hPrc; + if (0 == dwPid) + return FALSE; + hPrc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid); // Opens handle to the process. + if (!TerminateProcess(hPrc, 0)) // Terminates a process. + { + + CloseHandle(hPrc); + + return FALSE; + } + else + WaitForSingleObject(hPrc, 2000); // At most ,waite 2000 millisecond. + CloseHandle(hPrc); + return TRUE; +} + +static BOOL KillProcessByName(const TCHAR *lpszProcessName) +{ + unsigned int pid = -1; + BOOL retval = TRUE; + if (lpszProcessName == NULL) + return -1; + + DWORD dwRet = 0; + HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + PROCESSENTRY32 processInfo; + processInfo.dwSize = sizeof(PROCESSENTRY32); + int flag = Process32First(hSnapshot, &processInfo); + // Find the process with name as same as lpszProcessName + + while (flag != 0) + { + printf("kill process find %s\r\n", processInfo.szExeFile); + char dest[140]; + if (lstrcmpW(processInfo.szExeFile, lpszProcessName) == 0) + { + // Terminate the process. + pid = processInfo.th32ProcessID; + HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid); + printf("kill process pid %d\r\n", pid); + if (TerminateProcess(hProcess, 0) != TRUE) + { // Failed to terminate it. + retval = FALSE; + break; + } + } + flag = Process32Next(hSnapshot, &processInfo); + } // while (flag != 0) + CloseHandle(hSnapshot); + if (pid == -1) + return FALSE; + return retval; +} + +static BOOL SetProcessPrivilege(const char *lpName, BOOL opt) + +{ + HANDLE tokenhandle; + TOKEN_PRIVILEGES NewState; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &tokenhandle)) + { + wchar_t dest[150]; + mbstowcs(dest,lpName,strlen(lpName)); + LookupPrivilegeValue(NULL, dest, &NewState.Privileges[0].Luid); + NewState.PrivilegeCount = 1; + NewState.Privileges[0].Attributes = opt != 0 ? 2 : 0; + AdjustTokenPrivileges(tokenhandle, FALSE, &NewState, sizeof(NewState), NULL, NULL); + CloseHandle(tokenhandle); + return 1; + } + else + + { + return 0; + } +} + +// static int RangeProcess() +// { +// DWORD Proc_pid[1024], Retn_bytes, Proc_count, Retn_bytes2; + +// unsigned int i; + +// HMODULE hMod[1024]; + +// HANDLE hProcess; + +// char szModName[MAX_PATH]; + +// if (EnumProcesses(Proc_pid, sizeof(Proc_pid), &Retn_bytes)) + +// { + +// Proc_count = Retn_bytes / sizeof(DWORD); + +// SetProcessPrivilege("SeDebugPrivilege", 1); + +// for (i = 0; i < Proc_count; i++) + +// { + +// hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, Proc_pid[i]); + +// if (hProcess != NULL) + +// { + +// EnumProcessModules(hProcess, hMod, sizeof(hMod), &Retn_bytes2); + +// GetModuleFileNameEx(hProcess, hMod[0], szModName, sizeof(szModName)); + +// // printf("PID=%d Path=%s\n", Proc_pid[i], szModName); +// } + +// CloseHandle(hProcess); +// } + +// SetProcessPrivilege("SeDebugPrivilege", 0); +// } + +// return 0; +// } + +static int test_fork() +{ + char szCommandLine[] = "D:\\game\\The Legend of Zelda Breath of the Wild\\cemu\\cemu.exe"; + STARTUPINFO si = {sizeof(si)}; + PROCESS_INFORMATION pi; + si.dwFlags = STARTF_USESHOWWINDOW; //指定wShowWindow成员有效 + si.wShowWindow = TRUE; //此成员设为TRUE的话则显示新建进程的主窗 + wchar_t dest[350]; + mbstowcs(dest,szCommandLine,strlen(szCommandLine)); + BOOL bRet = CreateProcess( + NULL, //不在此指定可执行文件的文件名 + dest, //命令行参 + NULL, //默认进程安全 + NULL, //默认进程安全 + FALSE, //指定当前进程内句柄不可以被子进程继承 + CREATE_NEW_CONSOLE, //为新进程创建一个新的控制台窗口 + NULL, //使用本进程的环境变量 + NULL, //使用本进程的驱动器和目录 + &si, + &pi); + if (bRet) + { + + //不使用的句柄最好关 + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + printf("new process id %d\n", pi.dwProcessId); + printf("new thread id %d\n", pi.dwThreadId); + } + return 0; +} + +#endif + +DaemonizeMonitor::DaemonizeMonitor(string path) +{ +#ifdef linux + auto process = RangeProcess(); + for (auto itr = process.begin(); itr != process.end(); itr++) + { + std::cout << itr->process_name << std::endl; + m_pids[itr->process_name.substr(0, itr->process_name.size() - 1)] = itr->pid; + } +#endif + auto strip = StripList(path.c_str(), "/"); + if(strip.size() > 0){ + std::cout<< strip[strip.size() - 1]< 0){ + }else{ + this->AddNewProcess(path); + } + } + +} + +#ifdef linux +void start_process(string path) +{ + + std::thread p(_process_start, path); + + p.detach(); +} +#endif + +int DaemonizeMonitor::AddNewProcess(string path) +{ + if (path == "") + { + return -1; + } + this->m_path_process.push_back(path); + if(mCallback.operator bool()) + mCallback(); + +#ifdef linux + if (!existed(path)) + { + return -1; + } + start_process(path); + usleep(100000); + auto strip = StripList(path.c_str(), "/"); + + auto process = RangeProcess(); + for (auto itr = process.begin(); itr != process.end(); itr++) + { + m_pids[itr->process_name.substr(0, itr->process_name.size() - 1)] = itr->pid; + } + if (m_pids[strip[strip.size() - 1]] > 0) + this->m_running_pid[strip[strip.size() - 1]] = m_pids[strip[strip.size() - 1]]; +#endif +#ifdef _WIN32 + STARTUPINFO si = {sizeof(si)}; + PROCESS_INFORMATION pi; + si.dwFlags = STARTF_USESHOWWINDOW; //指定wShowWindow成员有效 + si.wShowWindow = TRUE; //此成员设为TRUE的话则显示新建进程的主窗 + + wchar_t dest[150] = {0}; + mbstowcs(dest,(LPSTR)path.c_str(),strlen((LPSTR)path.c_str())); + BOOL bRet = CreateProcess( + NULL, //不在此指定可执行文件的文件名 + dest, //命令行参 + NULL, //默认进程安全 + NULL, //默认进程安全 + FALSE, //指定当前进程内句柄不可以被子进程继承 + CREATE_NEW_CONSOLE, //为新进程创建一个新的控制台窗口 + NULL, //使用本进程的环境变量 + NULL, //使用本进程的驱动器和目录 + &si, + &pi); + + if (bRet) + { + //不使用的句柄最好关 + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + printf("new process id %d\n", pi.dwProcessId); + this->m_running_pid[path] = pi.dwProcessId; + return 0; + } + return -1; +#endif +} + +int DaemonizeMonitor::StartMonitor() +{ + +#ifdef _WIN32 + DWORD Proc_pid[10240], Retn_bytes, Proc_count, Retn_bytes2; + unsigned int i; + HMODULE hMod[1024]; + HANDLE hProcess; + char szModName[MAX_PATH]; + while (true) + { + /* code */ + Sleep(5000); + for (auto itr = m_running_pid.begin(); itr != m_running_pid.end(); itr++) + { + bool found = false; + if (EnumProcesses(Proc_pid, sizeof(Proc_pid), &Retn_bytes)) + { + Proc_count = Retn_bytes / sizeof(DWORD); + SetProcessPrivilege("SeDebugPrivilege", 1); + for (i = 0; i < Proc_count; i++) + { + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, Proc_pid[i]); + if (hProcess != NULL) + { + wchar_t dest[150] = {0}; + wchar_t dest2[150] = {0}; + + mbstowcs(dest,szModName,strlen(szModName)); + EnumProcessModules(hProcess, hMod, sizeof(hMod), &Retn_bytes2); + GetModuleFileNameEx(hProcess, hMod[0], dest, sizeof(szModName)); + qDebug()<second) + <first.c_str(),itr->first.size()); + + if (lstrcmpW(dest,dest2) == 0) + { + found = true; + break; + } + } + CloseHandle(hProcess); + } + SetProcessPrivilege("SeDebugPrivilege", 0); + if (!found) + { + // 没找到该应用实例就重启应 + auto it = m_path_process.begin(); + while (it != m_path_process.end()) + { + if (*it == itr->first) + { + it = m_path_process.erase(it); + } + else + it++; + } + for (auto it = m_path_process.begin(); it != m_path_process.end(); it++) + { + std::cout << *it << std::endl; + } + this->AddNewProcess(itr->first); + } + } + } + } + return 0; +#endif + +#ifdef linux + while (true){ + auto process = RangeProcess(); + usleep(50000); + for (auto itr = m_running_pid.begin(); itr != m_running_pid.end(); itr++) + { + bool found = false; + for (auto itr2 = process.begin(); itr2 != process.end(); itr2++) + { + if (itr->second == itr2->pid) + { + // std::cout << itr->second << itr2->pid << std::endl; + found = true; + break; + } + } + if (!found) + { + // 没找到该应用实例就重启应 + auto it = m_path_process.begin(); + while (it != m_path_process.end()) + { + if (*it == itr->first) + { + it = m_path_process.erase(it); + } + else + it++; + } + for (auto it = m_path_process.begin(); it != m_path_process.end(); it++) + { + std::cout << *it << std::endl; + } + std::cout << "add new process" << std::endl; + if (0 > this->AddNewProcess(itr->first)) + std::cout << "error not found" << std::endl; + } + } + } +#endif +} + +int DaemonizeMonitor::SetRestartCallback(RestartCallback b) +{ + this->mCallback = b; + return 0; +} + +int DaemonizeMonitor::StopMonitor(string) +{ +#ifdef _WIN32 + return 0; +#endif +} + +int DaemonizeMonitor::StopProcess(string path) +{ + if (path == "") + { + return -1; + } +#ifdef _WIN32 + if (m_running_pid.find(path) != m_running_pid.end()) + { + DWORD pid = m_running_pid.at(path); + m_running_pid.erase(path); + if (KillProcess(pid)) + return 0; + else + { + return -1; + } + } + return 0; +#endif +#ifdef linux +#endif +} diff --git a/rolekeeper/daemon.h b/rolekeeper/daemon.h new file mode 100644 index 0000000..47e4c4a --- /dev/null +++ b/rolekeeper/daemon.h @@ -0,0 +1,54 @@ +/* + * @Author: your name + * @Date: 2021-07-23 23:40:36 + * @LastEditTime: 2021-12-06 10:53:37 + * @LastEditors: Please set LastEditors + * @Description: In User Settings Edi + * @FilePath: \generallib\general\src\function\daemon.h + */ + +#pragma once + +#if __cplusplus >= 201103L +#pragma message("编译器支持c++11") +#endif + +#ifdef linux +#include +#endif + +#include +#include +#include +using namespace std; + +#ifdef WIN32 +#include +#include +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class DaemonizeMonitor{ +public: + typedef std::function RestartCallback; + + DaemonizeMonitor(string path); + int AddNewProcess(string); + int StopMonitor(string); + int StopProcess(string); + int StartMonitor(); + int SetRestartCallback(RestartCallback ); +private: + std::vector m_path_process; + std::map m_running_pid; + std::function mCallback; +}; diff --git a/rolekeeper/gif.ico b/rolekeeper/gif.ico new file mode 100644 index 0000000..4c9826a Binary files /dev/null and b/rolekeeper/gif.ico differ diff --git a/rolekeeper/main.cpp b/rolekeeper/main.cpp new file mode 100644 index 0000000..d334640 --- /dev/null +++ b/rolekeeper/main.cpp @@ -0,0 +1,17 @@ +#include "mainwindow.h" + +#include + + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.setMinimumHeight(600); + w.setMinimumWidth(800); + w.SetTitleHeight(25); + w.SetTrayIcon(new QIcon()); + + w.show(); + return a.exec(); +} diff --git a/rolekeeper/mainwindow.cpp b/rolekeeper/mainwindow.cpp new file mode 100644 index 0000000..b5ccb59 --- /dev/null +++ b/rolekeeper/mainwindow.cpp @@ -0,0 +1,80 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +#include +#include + +#include + + + +MainWindow::MainWindow(QWidget *parent) + : QssMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + setWindowFlags( Qt::WindowStaysOnTopHint); + + QSystemTrayIcon* m_tray; //托盘类 + + QMenu* m_menu; //托盘菜单 + + QAction* m_resetAction; //托盘按钮 + + QAction* m_quitAction; //托盘按钮 + m_tray = new QSystemTrayIcon(this);//实例化 + QPixmap m_logo(":/gif.ico"); + + m_tray->setIcon(QIcon(m_logo));//设置图标 + m_tray->show(); + connect(m_tray,&QSystemTrayIcon::activated,this,&MainWindow::TrayIconAction); + m_menu = new QMenu(this); + m_resetAction = new QAction(this); + m_resetAction->setText("show"); + m_quitAction = new QAction(this); + m_resetAction->setIcon(QIcon(m_logo)); + m_quitAction->setText("quit"); + m_quitAction->setIcon(QIcon(m_logo)); + connect(m_quitAction,&QAction::triggered,qApp,&QApplication::quit); + connect(m_resetAction,&QAction::triggered,this,&MainWindow::restory); + + m_tray->setContextMenu(m_menu);//设置托盘菜单 + m_menu->addAction(m_resetAction); + m_menu->addAction(m_quitAction); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::GuadDone() +{ + qDebug()<<"GuadDone"; +} + + +void MainWindow::on_pushButton_clicked() +{ + QString fileName = QFileDialog::getOpenFileName( + this, + tr("open a file."), + "D:/", + tr("exe(*.exe);;")); + if (fileName != "") { + m_path = fileName; + ui->lineEdit->setText(m_path); + } +} + + +void MainWindow::on_pushButton_2_clicked() +{ + if(mGuard == nullptr){ + mGuard = new ASyncGuard(); + } + connect(mGuard,&ASyncGuard::Done, + this,&MainWindow::GuadDone); + mGuard->Start(this); +} + diff --git a/rolekeeper/mainwindow.h b/rolekeeper/mainwindow.h new file mode 100644 index 0000000..7c16717 --- /dev/null +++ b/rolekeeper/mainwindow.h @@ -0,0 +1,57 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include "Qss.h" +#include +#include +#include "daemon.h" +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class ASyncGuard :public QSSASyncProcess{ +public: + void Run(void *ptr) { + // p1.StartMonitor(); + mDaemon = new DaemonizeMonitor("J:\\programs\\Microsoft VS Code\\Code.exe"); + mDaemon->SetRestartCallback([=](){ + qDebug()<<"s12"; + }); + mDaemon->StartMonitor(); + } + // DaemonizeMonitor p1("J:\\programs\\Microsoft VS Code\\Code.exe"); + DaemonizeMonitor *mDaemon; +}; + +class MainWindow : public QssMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +public slots: + void TrayIconAction(QSystemTrayIcon::ActivationReason reason) + { + + if(reason == QSystemTrayIcon::Trigger) + this->showNormal(); + } + void restory(){ + this->showNormal(); + } + void GuadDone(); +private slots: + void on_pushButton_clicked(); + + void on_pushButton_2_clicked(); + +private: + Ui::MainWindow *ui; + QString m_path; + ASyncGuard *mGuard; +}; +#endif // MAINWINDOW_H diff --git a/rolekeeper/mainwindow.ui b/rolekeeper/mainwindow.ui new file mode 100644 index 0000000..902c510 --- /dev/null +++ b/rolekeeper/mainwindow.ui @@ -0,0 +1,96 @@ + + + MainWindow + + + + 0 + 0 + 870 + 602 + + + + MainWindow + + + + + + + + + + 15 + + + + 守护进程: + + + + + + + + 15 + + + + + + + true + + + + + + + + 15 + + + + 打开 + + + + + + + + 15 + + + + 开始守护 + + + + + + + + + true + + + + + + + + + 0 + 0 + 870 + 26 + + + + + + + + diff --git a/rolekeeper/qss/css/QssMainWindow.css b/rolekeeper/qss/css/QssMainWindow.css new file mode 100644 index 0000000..b7dec88 --- /dev/null +++ b/rolekeeper/qss/css/QssMainWindow.css @@ -0,0 +1,10 @@ + +QMainWindow{ + border: none; + background: rgb(245, 252, 252); + font-family:"微软雅黑"; + font-style: normal; +} + + + diff --git a/rolekeeper/qss/css/QssTitleBar.css b/rolekeeper/qss/css/QssTitleBar.css new file mode 100644 index 0000000..bc0b038 --- /dev/null +++ b/rolekeeper/qss/css/QssTitleBar.css @@ -0,0 +1,66 @@ +QWidget#qssTitleBar{ + color: white; + background: rgb(51,101,177); + border: 0px; + margin: 0px; + font-family:"微软雅黑"; + +} +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: 17px; + font-family:'黑体', Courier, monospace; +} + diff --git a/rolekeeper/qss/css/dark.css b/rolekeeper/qss/css/dark.css new file mode 100644 index 0000000..c7021da --- /dev/null +++ b/rolekeeper/qss/css/dark.css @@ -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; +} + +/* 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 */ +} +/* */ + +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; +} + +/* 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; +} + +/* */ + +/*================================================================ +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.*/ +} diff --git a/rolekeeper/qss/css/qss.css b/rolekeeper/qss/css/qss.css new file mode 100644 index 0000000..e288897 --- /dev/null +++ b/rolekeeper/qss/css/qss.css @@ -0,0 +1,782 @@ +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); +} + +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{ + font-family:"微软雅黑"; +} +/**********标签**********/ +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; + font-family:"微软雅黑"; + +} + + +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); +} diff --git a/rolekeeper/qss/css/white.css b/rolekeeper/qss/css/white.css new file mode 100644 index 0000000..847d018 --- /dev/null +++ b/rolekeeper/qss/css/white.css @@ -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; } diff --git a/rolekeeper/qss/icon/1-最大化.svg b/rolekeeper/qss/icon/1-最大化.svg new file mode 100644 index 0000000..b704561 --- /dev/null +++ b/rolekeeper/qss/icon/1-最大化.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/Thumbs.db b/rolekeeper/qss/icon/Thumbs.db new file mode 100644 index 0000000..fb49600 Binary files /dev/null and b/rolekeeper/qss/icon/Thumbs.db differ diff --git a/rolekeeper/qss/icon/action_config.png b/rolekeeper/qss/icon/action_config.png new file mode 100644 index 0000000..f7e64b6 Binary files /dev/null and b/rolekeeper/qss/icon/action_config.png differ diff --git a/rolekeeper/qss/icon/array.svg b/rolekeeper/qss/icon/array.svg new file mode 100644 index 0000000..7ae234d --- /dev/null +++ b/rolekeeper/qss/icon/array.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/boolean.svg b/rolekeeper/qss/icon/boolean.svg new file mode 100644 index 0000000..6592ee0 --- /dev/null +++ b/rolekeeper/qss/icon/boolean.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/btn_close_down.png b/rolekeeper/qss/icon/btn_close_down.png new file mode 100644 index 0000000..814cdc7 Binary files /dev/null and b/rolekeeper/qss/icon/btn_close_down.png differ diff --git a/rolekeeper/qss/icon/btn_close_down.svg b/rolekeeper/qss/icon/btn_close_down.svg new file mode 100644 index 0000000..095ee89 --- /dev/null +++ b/rolekeeper/qss/icon/btn_close_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/btn_close_highlight.png b/rolekeeper/qss/icon/btn_close_highlight.png new file mode 100644 index 0000000..2bc66bb Binary files /dev/null and b/rolekeeper/qss/icon/btn_close_highlight.png differ diff --git a/rolekeeper/qss/icon/btn_close_normal.png b/rolekeeper/qss/icon/btn_close_normal.png new file mode 100644 index 0000000..11c1f52 Binary files /dev/null and b/rolekeeper/qss/icon/btn_close_normal.png differ diff --git a/rolekeeper/qss/icon/btn_data.png b/rolekeeper/qss/icon/btn_data.png new file mode 100644 index 0000000..61329e1 Binary files /dev/null and b/rolekeeper/qss/icon/btn_data.png differ diff --git a/rolekeeper/qss/icon/btn_max_down.png b/rolekeeper/qss/icon/btn_max_down.png new file mode 100644 index 0000000..ab159f8 Binary files /dev/null and b/rolekeeper/qss/icon/btn_max_down.png differ diff --git a/rolekeeper/qss/icon/btn_max_highlight.png b/rolekeeper/qss/icon/btn_max_highlight.png new file mode 100644 index 0000000..f9a2a1b Binary files /dev/null and b/rolekeeper/qss/icon/btn_max_highlight.png differ diff --git a/rolekeeper/qss/icon/btn_max_normal.png b/rolekeeper/qss/icon/btn_max_normal.png new file mode 100644 index 0000000..cb065af Binary files /dev/null and b/rolekeeper/qss/icon/btn_max_normal.png differ diff --git a/rolekeeper/qss/icon/btn_max_normal.svg b/rolekeeper/qss/icon/btn_max_normal.svg new file mode 100644 index 0000000..daacc05 --- /dev/null +++ b/rolekeeper/qss/icon/btn_max_normal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/btn_mini_down.png b/rolekeeper/qss/icon/btn_mini_down.png new file mode 100644 index 0000000..d7a579a Binary files /dev/null and b/rolekeeper/qss/icon/btn_mini_down.png differ diff --git a/rolekeeper/qss/icon/btn_mini_down.svg b/rolekeeper/qss/icon/btn_mini_down.svg new file mode 100644 index 0000000..4ae753b --- /dev/null +++ b/rolekeeper/qss/icon/btn_mini_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/btn_mini_highlight.png b/rolekeeper/qss/icon/btn_mini_highlight.png new file mode 100644 index 0000000..71b6020 Binary files /dev/null and b/rolekeeper/qss/icon/btn_mini_highlight.png differ diff --git a/rolekeeper/qss/icon/btn_mini_normal.png b/rolekeeper/qss/icon/btn_mini_normal.png new file mode 100644 index 0000000..644727a Binary files /dev/null and b/rolekeeper/qss/icon/btn_mini_normal.png differ diff --git a/rolekeeper/qss/icon/btn_restore_down.png b/rolekeeper/qss/icon/btn_restore_down.png new file mode 100644 index 0000000..67b4705 Binary files /dev/null and b/rolekeeper/qss/icon/btn_restore_down.png differ diff --git a/rolekeeper/qss/icon/btn_restore_down.svg b/rolekeeper/qss/icon/btn_restore_down.svg new file mode 100644 index 0000000..04bc9e2 --- /dev/null +++ b/rolekeeper/qss/icon/btn_restore_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/btn_restore_highlight.png b/rolekeeper/qss/icon/btn_restore_highlight.png new file mode 100644 index 0000000..f57eb81 Binary files /dev/null and b/rolekeeper/qss/icon/btn_restore_highlight.png differ diff --git a/rolekeeper/qss/icon/btn_restore_normal.png b/rolekeeper/qss/icon/btn_restore_normal.png new file mode 100644 index 0000000..e53f9c1 Binary files /dev/null and b/rolekeeper/qss/icon/btn_restore_normal.png differ diff --git a/rolekeeper/qss/icon/btn_serial.png b/rolekeeper/qss/icon/btn_serial.png new file mode 100644 index 0000000..8543aa8 Binary files /dev/null and b/rolekeeper/qss/icon/btn_serial.png differ diff --git a/rolekeeper/qss/icon/charts.png b/rolekeeper/qss/icon/charts.png new file mode 100644 index 0000000..ddb2e5b Binary files /dev/null and b/rolekeeper/qss/icon/charts.png differ diff --git a/rolekeeper/qss/icon/check_box_p.png b/rolekeeper/qss/icon/check_box_p.png new file mode 100644 index 0000000..33c8d49 Binary files /dev/null and b/rolekeeper/qss/icon/check_box_p.png differ diff --git a/rolekeeper/qss/icon/checkbox.png b/rolekeeper/qss/icon/checkbox.png new file mode 100644 index 0000000..2c56aa4 Binary files /dev/null and b/rolekeeper/qss/icon/checkbox.png differ diff --git a/rolekeeper/qss/icon/checkbox_h.png b/rolekeeper/qss/icon/checkbox_h.png new file mode 100644 index 0000000..3d89dc3 Binary files /dev/null and b/rolekeeper/qss/icon/checkbox_h.png differ diff --git a/rolekeeper/qss/icon/checkbox_p.png b/rolekeeper/qss/icon/checkbox_p.png new file mode 100644 index 0000000..8f8d37b Binary files /dev/null and b/rolekeeper/qss/icon/checkbox_p.png differ diff --git a/rolekeeper/qss/icon/close_main.png b/rolekeeper/qss/icon/close_main.png new file mode 100644 index 0000000..3356428 Binary files /dev/null and b/rolekeeper/qss/icon/close_main.png differ diff --git a/rolekeeper/qss/icon/code-array.svg b/rolekeeper/qss/icon/code-array.svg new file mode 100644 index 0000000..0434557 --- /dev/null +++ b/rolekeeper/qss/icon/code-array.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/combo_arrow.png b/rolekeeper/qss/icon/combo_arrow.png new file mode 100644 index 0000000..09751e1 Binary files /dev/null and b/rolekeeper/qss/icon/combo_arrow.png differ diff --git a/rolekeeper/qss/icon/dataflow.svg b/rolekeeper/qss/icon/dataflow.svg new file mode 100644 index 0000000..0c69265 --- /dev/null +++ b/rolekeeper/qss/icon/dataflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/downarrow.png b/rolekeeper/qss/icon/downarrow.png new file mode 100644 index 0000000..b810e44 Binary files /dev/null and b/rolekeeper/qss/icon/downarrow.png differ diff --git a/rolekeeper/qss/icon/hor_scroll_left_arrow.png b/rolekeeper/qss/icon/hor_scroll_left_arrow.png new file mode 100644 index 0000000..1093f6e Binary files /dev/null and b/rolekeeper/qss/icon/hor_scroll_left_arrow.png differ diff --git a/rolekeeper/qss/icon/hor_scroll_right_arrow.png b/rolekeeper/qss/icon/hor_scroll_right_arrow.png new file mode 100644 index 0000000..cc3bf17 Binary files /dev/null and b/rolekeeper/qss/icon/hor_scroll_right_arrow.png differ diff --git a/rolekeeper/qss/icon/int.png b/rolekeeper/qss/icon/int.png new file mode 100644 index 0000000..1052220 Binary files /dev/null and b/rolekeeper/qss/icon/int.png differ diff --git a/rolekeeper/qss/icon/int.svg b/rolekeeper/qss/icon/int.svg new file mode 100644 index 0000000..9ce427c --- /dev/null +++ b/rolekeeper/qss/icon/int.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/key.svg b/rolekeeper/qss/icon/key.svg new file mode 100644 index 0000000..cda69f7 --- /dev/null +++ b/rolekeeper/qss/icon/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/logo.ico b/rolekeeper/qss/icon/logo.ico new file mode 100644 index 0000000..d26ea98 Binary files /dev/null and b/rolekeeper/qss/icon/logo.ico differ diff --git a/rolekeeper/qss/icon/logo.png b/rolekeeper/qss/icon/logo.png new file mode 100644 index 0000000..5fbeb2a Binary files /dev/null and b/rolekeeper/qss/icon/logo.png differ diff --git a/rolekeeper/qss/icon/missing.svg b/rolekeeper/qss/icon/missing.svg new file mode 100644 index 0000000..fba40ff --- /dev/null +++ b/rolekeeper/qss/icon/missing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/objects.svg b/rolekeeper/qss/icon/objects.svg new file mode 100644 index 0000000..2f33712 --- /dev/null +++ b/rolekeeper/qss/icon/objects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/radio.png b/rolekeeper/qss/icon/radio.png new file mode 100644 index 0000000..8c32808 Binary files /dev/null and b/rolekeeper/qss/icon/radio.png differ diff --git a/rolekeeper/qss/icon/radio_h.png b/rolekeeper/qss/icon/radio_h.png new file mode 100644 index 0000000..84407ba Binary files /dev/null and b/rolekeeper/qss/icon/radio_h.png differ diff --git a/rolekeeper/qss/icon/radio_p.png b/rolekeeper/qss/icon/radio_p.png new file mode 100644 index 0000000..4f32d5e Binary files /dev/null and b/rolekeeper/qss/icon/radio_p.png differ diff --git a/rolekeeper/qss/icon/sizegrip.png b/rolekeeper/qss/icon/sizegrip.png new file mode 100644 index 0000000..f2667b9 Binary files /dev/null and b/rolekeeper/qss/icon/sizegrip.png differ diff --git a/rolekeeper/qss/icon/string.svg b/rolekeeper/qss/icon/string.svg new file mode 100644 index 0000000..924a541 --- /dev/null +++ b/rolekeeper/qss/icon/string.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/testpoint.png b/rolekeeper/qss/icon/testpoint.png new file mode 100644 index 0000000..7480cc0 Binary files /dev/null and b/rolekeeper/qss/icon/testpoint.png differ diff --git a/rolekeeper/qss/icon/ver_scroll_bottom_arrow.png b/rolekeeper/qss/icon/ver_scroll_bottom_arrow.png new file mode 100644 index 0000000..2be161f Binary files /dev/null and b/rolekeeper/qss/icon/ver_scroll_bottom_arrow.png differ diff --git a/rolekeeper/qss/icon/ver_scroll_top_arrow.png b/rolekeeper/qss/icon/ver_scroll_top_arrow.png new file mode 100644 index 0000000..a8e4fed Binary files /dev/null and b/rolekeeper/qss/icon/ver_scroll_top_arrow.png differ diff --git a/rolekeeper/qss/icon/关闭.svg b/rolekeeper/qss/icon/关闭.svg new file mode 100644 index 0000000..90e1a95 --- /dev/null +++ b/rolekeeper/qss/icon/关闭.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/icon/最小化.svg b/rolekeeper/qss/icon/最小化.svg new file mode 100644 index 0000000..171b4f6 --- /dev/null +++ b/rolekeeper/qss/icon/最小化.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rolekeeper/qss/qss.qrc b/rolekeeper/qss/qss.qrc new file mode 100644 index 0000000..ad292da --- /dev/null +++ b/rolekeeper/qss/qss.qrc @@ -0,0 +1,52 @@ + + + icon/btn_close_down.png + icon/btn_close_highlight.png + icon/btn_close_normal.png + icon/btn_max_down.png + icon/btn_max_highlight.png + icon/btn_max_normal.png + icon/btn_mini_down.png + icon/btn_mini_highlight.png + icon/btn_mini_normal.png + icon/btn_restore_down.png + icon/btn_restore_highlight.png + icon/btn_restore_normal.png + icon/checkbox.png + icon/checkbox_h.png + icon/checkbox_p.png + icon/downarrow.png + icon/hor_scroll_left_arrow.png + icon/hor_scroll_right_arrow.png + icon/radio.png + icon/radio_h.png + icon/radio_p.png + icon/ver_scroll_bottom_arrow.png + icon/ver_scroll_top_arrow.png + icon/sizegrip.png + css/qss.css + icon/btn_serial.png + css/white.css + css/dark.css + icon/btn_data.png + icon/dataflow.svg + icon/check_box_p.png + icon/combo_arrow.png + icon/charts.png + icon/btn_max_normal.svg + icon/btn_restore_down.svg + icon/btn_mini_down.svg + icon/btn_close_down.svg + icon/close_main.png + icon/logo.png + icon/key.svg + icon/action_config.png + icon/int.svg + icon/objects.svg + icon/string.svg + icon/missing.svg + css/QssMainWindow.css + css/QssTitleBar.css + icon/testpoint.png + + diff --git a/rolekeeper/rc.qrc b/rolekeeper/rc.qrc new file mode 100644 index 0000000..d889c81 --- /dev/null +++ b/rolekeeper/rc.qrc @@ -0,0 +1,5 @@ + + + gif.ico + + diff --git a/rolekeeper/rolekeeper.pro b/rolekeeper/rolekeeper.pro new file mode 100644 index 0000000..54c067f --- /dev/null +++ b/rolekeeper/rolekeeper.pro @@ -0,0 +1,42 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +config += c++11 + + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +RESOURCES += $$PWD/qss/qss.qrc + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +include(D:\project\c++qt\qsswraper\qsswraper.pri) + +SOURCES += \ + daemon.cpp \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + daemon.h \ + mainwindow.h + +FORMS += \ + mainwindow.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +RESOURCES += \ + rc.qrc + diff --git a/rolekeeper/rolekeeper.pro.user b/rolekeeper/rolekeeper.pro.user new file mode 100644 index 0000000..547231e --- /dev/null +++ b/rolekeeper/rolekeeper.pro.user @@ -0,0 +1,752 @@ + + + + + + EnvironmentId + {a6d5c39e-5a78-4e2f-8f04-3f619cffa362} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + -fno-delayed-template-parsing + + true + Builtin.Questionable + + false + true + Builtin.DefaultTidyAndClazy + 6 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 5.12.12 MSVC2017 64bit + Desktop Qt 5.12.12 MSVC2017 64bit + qt.qt5.51212.win64_msvc2017_64_kit + 0 + 0 + 0 + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Debug + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Release + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Profile + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:D:/project/c++qt/rolekeeper/rolekeeper.pro + D:/project/c++qt/rolekeeper/rolekeeper.pro + false + true + true + false + true + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2017_64bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop + Desktop Qt 5.12.12 MSVC2015 64bit + Desktop Qt 5.12.12 MSVC2015 64bit + qt.qt5.51212.win64_msvc2015_64_kit + 0 + 0 + 0 + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Debug + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Release + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Profile + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MSVC2015_64bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + false + true + + 1 + + + + ProjectExplorer.Project.Target.2 + + WinRt.Device.Local + Qt 5.12.12 for UWP 64bit (MSVC 2015) + Qt 5.12.12 for UWP 64bit (MSVC 2015) + qt.qt5.51212.win64_msvc2015_winrt_x64_kit + 0 + 0 + 0 + + 0 + D:\project\c++qt\build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Debug + D:/project/c++qt/build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\project\c++qt\build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Release + D:/project/c++qt/build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\project\c++qt\build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Profile + D:/project/c++qt/build-rolekeeper-Qt_5_12_12_for_UWP_64bit_MSVC_2015-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + + true + Run windeployqt + WinRt.BuildStep.Deploy + --qmldir D:\project\c++qt\rolekeeper + --qmldir D:\project\c++qt\rolekeeper + + 1 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + WinRTAppxDeployConfiguration + + 1 + + true + true + true + + 2 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + false + true + + 1 + + + + ProjectExplorer.Project.Target.3 + + Desktop + Desktop Qt 5.12.12 MinGW 32-bit + Desktop Qt 5.12.12 MinGW 32-bit + qt.qt5.51212.win32_mingw73_kit + 0 + 0 + 0 + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Debug + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Release + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\project\c++qt\build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Profile + D:/project/c++qt/build-rolekeeper-Desktop_Qt_5_12_12_MinGW_32_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:D:/project/c++qt/rolekeeper/rolekeeper.pro + D:/project/c++qt/rolekeeper/rolekeeper.pro + false + true + true + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 4 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/server/main.cpp b/server/main.cpp index 9e22478..603829d 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-06-30 10:02:04 - * @LastEditTime: 2021-07-06 21:55:15 + * @LastEditTime: 2022-03-23 20:24:19 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \server\main.cpp @@ -45,7 +45,6 @@ int main(){ return 0; } #endif - std::cout<<"start server\r\n"; TcpServerLibevent server(8000,"0.0.0.0"); server.StartServerSync();