添加工具栏按钮图标
parent
a3b63c6fe1
commit
6f2170559d
|
@ -1,5 +1,7 @@
|
||||||
#include "datafetcher.h"
|
#include "datafetcher.h"
|
||||||
#include "globalparameters.h"
|
#include "globalparameters.h"
|
||||||
|
#include "mysqlutils.h"
|
||||||
|
#include <hv/hlog.h>
|
||||||
|
|
||||||
DataFetcher::DataFetcher()
|
DataFetcher::DataFetcher()
|
||||||
{
|
{
|
||||||
|
@ -13,6 +15,13 @@ DataFetcher::~DataFetcher()
|
||||||
|
|
||||||
bool DataFetcher::Fetch(TableData& tbl_data)
|
bool DataFetcher::Fetch(TableData& tbl_data)
|
||||||
{
|
{
|
||||||
|
int rows = MysqlUtils::getInstance()->RetrieveTableData(tbl_data);
|
||||||
|
if (rows < 0)
|
||||||
|
{
|
||||||
|
hloge("Failed to retrieve signal data");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef DATAFETCHER_H
|
#ifndef DATAFETCHER_H
|
||||||
#define DATAFETCHER_H
|
#define DATAFETCHER_H
|
||||||
|
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include "globalparameters.h"
|
#include "globalparameters.h"
|
||||||
|
|
||||||
class DataFetcher
|
class DataFetcher
|
||||||
|
|
|
@ -77,6 +77,7 @@ SOURCES += \
|
||||||
datafetcher.cpp \
|
datafetcher.cpp \
|
||||||
devicepropertypage.cpp \
|
devicepropertypage.cpp \
|
||||||
globalparameters.cpp \
|
globalparameters.cpp \
|
||||||
|
kutilities.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
maindialog.cpp \
|
maindialog.cpp \
|
||||||
mainwindow.cpp \
|
mainwindow.cpp \
|
||||||
|
@ -88,6 +89,7 @@ HEADERS += \
|
||||||
datafetcher.h \
|
datafetcher.h \
|
||||||
devicepropertypage.h \
|
devicepropertypage.h \
|
||||||
globalparameters.h \
|
globalparameters.h \
|
||||||
|
kutilities.h \
|
||||||
maindialog.h \
|
maindialog.h \
|
||||||
mainwindow.h \
|
mainwindow.h \
|
||||||
mysqlutils.h \
|
mysqlutils.h \
|
||||||
|
|
|
@ -12,5 +12,8 @@
|
||||||
<file>images/PageSetting.png</file>
|
<file>images/PageSetting.png</file>
|
||||||
<file>images/PageSwitch.png</file>
|
<file>images/PageSwitch.png</file>
|
||||||
<file>images/PageUps.png</file>
|
<file>images/PageUps.png</file>
|
||||||
|
<file>images/icons8-add-64.png</file>
|
||||||
|
<file>images/icons8-close-64.png</file>
|
||||||
|
<file>images/icons8-refresh-64.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,116 @@
|
||||||
|
#include "kutilities.h"
|
||||||
|
#include <iomanip>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
Kutilities::Kutilities() {}
|
||||||
|
|
||||||
|
|
||||||
|
// 函数用于将内存块转换为十六进制字符串
|
||||||
|
std::string Kutilities::printHex(const void* data, size_t size)
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
std::ostringstream oss2;
|
||||||
|
std::ostringstream ossrow;
|
||||||
|
|
||||||
|
// 每行输出的字节数
|
||||||
|
const size_t lineSize = 16;
|
||||||
|
const unsigned char* p = static_cast<const unsigned char*>(data);
|
||||||
|
|
||||||
|
int ic = 0;
|
||||||
|
int row = 0;
|
||||||
|
|
||||||
|
ossrow << std::setw(8) << std::setfill('0') << std::hex << row++ << "h : ";
|
||||||
|
oss << ossrow.str().c_str();
|
||||||
|
|
||||||
|
for( size_t i = 0; i < size; ++i )
|
||||||
|
{
|
||||||
|
ic++;
|
||||||
|
// 每个字节之间用空格分隔
|
||||||
|
oss << std::setw(2) << std::setfill('0') << std::hex << std::uppercase << static_cast<int>(p[i]);
|
||||||
|
|
||||||
|
char ch = (isprint(p[i]) != 0) ? p[i] : '.';
|
||||||
|
|
||||||
|
oss2 << ch;
|
||||||
|
|
||||||
|
//每lineSize个字节换行
|
||||||
|
if( (i + 1) % lineSize == 0 )
|
||||||
|
{
|
||||||
|
ossrow.clear();
|
||||||
|
ossrow.str("");
|
||||||
|
|
||||||
|
oss << " [" << oss2.str().c_str() << "]" << std::endl;
|
||||||
|
oss2.clear();
|
||||||
|
oss2.str("");
|
||||||
|
|
||||||
|
ossrow << std::setw(8) << std::setfill('0') << std::hex << row++ << "h : ";
|
||||||
|
oss << ossrow.str().c_str();
|
||||||
|
|
||||||
|
ic = 0;
|
||||||
|
}
|
||||||
|
else if( i == size - 1 )
|
||||||
|
{
|
||||||
|
if( (i + 1) % lineSize != 0 )
|
||||||
|
{
|
||||||
|
if( i % 2 != 0 )
|
||||||
|
{
|
||||||
|
for( size_t j = 0; j < (lineSize - ic); j++ )
|
||||||
|
{
|
||||||
|
oss << " --";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for( size_t j = 0; j < (lineSize - ic); j++ )
|
||||||
|
{
|
||||||
|
oss << " --";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
oss << " [" << oss2.str().c_str();
|
||||||
|
|
||||||
|
if( (i + 1) % lineSize != 0 )
|
||||||
|
{
|
||||||
|
for( size_t j = 0; j < (lineSize - ic); j++ )
|
||||||
|
{
|
||||||
|
oss << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oss << "]" << std::endl;
|
||||||
|
oss2.clear();
|
||||||
|
oss2.str("");
|
||||||
|
|
||||||
|
ic = 0;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
else if( (i + 1) % 8 == 0 )
|
||||||
|
{
|
||||||
|
oss << " ";
|
||||||
|
oss2 << " ";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oss << " ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string Kutilities::get_current_timestamp()
|
||||||
|
{
|
||||||
|
auto now = std::chrono::system_clock::now();
|
||||||
|
//通过不同精度获取相差的毫秒数
|
||||||
|
uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()
|
||||||
|
- std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() * 1000;
|
||||||
|
time_t tt = std::chrono::system_clock::to_time_t(now);
|
||||||
|
auto time_tm = localtime(&tt);
|
||||||
|
char strTime[25] = { 0 };
|
||||||
|
sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d.%03d", time_tm->tm_year + 1900,
|
||||||
|
time_tm->tm_mon + 1, time_tm->tm_mday, time_tm->tm_hour,
|
||||||
|
time_tm->tm_min, time_tm->tm_sec, (int)dis_millseconds);
|
||||||
|
return std::string(strTime);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef KUTILITIES_H
|
||||||
|
#define KUTILITIES_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class Kutilities
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Kutilities();
|
||||||
|
|
||||||
|
//获取当前精确到毫秒的时间戳,返回字符串格式YYYY-MM-DD HH:MI:SS.MMM
|
||||||
|
static std::string get_current_timestamp();
|
||||||
|
|
||||||
|
// 函数用于将内存块转换为十六进制字符串
|
||||||
|
static std::string printHex(const void* data, size_t size);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // KUTILITIES_H
|
|
@ -43,11 +43,11 @@ int main(int argc, char *argv[])
|
||||||
hlog_fsync();
|
hlog_fsync();
|
||||||
|
|
||||||
//若是系统自带的QStyle风格,则需要先创建为QStyleFactory::create(""),然后设置qApp->setStyle()
|
//若是系统自带的QStyle风格,则需要先创建为QStyleFactory::create(""),然后设置qApp->setStyle()
|
||||||
QStringList listStyle = QStyleFactory::keys();
|
//QStringList listStyle = QStyleFactory::keys();
|
||||||
foreach(QString val, listStyle) //打印当前系统支持的系统风格,,且打印出来
|
//foreach(QString val, listStyle) //打印当前系统支持的系统风格,,且打印出来
|
||||||
{
|
//{
|
||||||
qDebug()<<val<<" ";
|
// qDebug()<<val<<" ";
|
||||||
}
|
//}
|
||||||
|
|
||||||
//当前系统支持的系统风格
|
//当前系统支持的系统风格
|
||||||
//"windowsvista"
|
//"windowsvista"
|
||||||
|
|
|
@ -120,13 +120,23 @@ void MainDialog::CreateToolbar()
|
||||||
layout->addItem(spacer);
|
layout->addItem(spacer);
|
||||||
|
|
||||||
// Create actions for the toolbar
|
// Create actions for the toolbar
|
||||||
QAction *action1 = new QAction(QIcon(":/images/icon.png"), "Button 1", this);
|
QAction *action1 = new QAction(QIcon(":/images/icons8-add-64.png"), tr("Add Device"), this);
|
||||||
QAction *action2 = new QAction(QIcon(":/images/icon.png"), "Button 2", this);
|
action1->setToolTip(tr("Add a new device"));
|
||||||
QAction *action3 = new QAction(QIcon(":/images/icon.png"), "About...", this);
|
|
||||||
|
QAction *action2 = new QAction(QIcon(":/images/icons8-close-64.png"), tr("Remove Device"), this);
|
||||||
|
action2->setToolTip(tr("Remove a device"));
|
||||||
|
|
||||||
|
QAction *action4 = new QAction(QIcon(":/images/icons8-refresh-64.png"), tr("Refresh"), this);
|
||||||
|
action4->setToolTip(tr("Refresh"));
|
||||||
|
|
||||||
|
QAction *action3 = new QAction(QIcon(":/images/icon.png"), tr("About..."), this);
|
||||||
|
action3->setToolTip(tr("Show information about EMU Configurer toolkit"));
|
||||||
|
|
||||||
// Add actions to the toolbar
|
// Add actions to the toolbar
|
||||||
m_pMainToolBar->addAction(action1);
|
m_pMainToolBar->addAction(action1);
|
||||||
m_pMainToolBar->addAction(action2);
|
m_pMainToolBar->addAction(action2);
|
||||||
|
m_pMainToolBar->addAction(action4);
|
||||||
|
m_pMainToolBar->addSeparator();
|
||||||
m_pMainToolBar->addAction(action3);
|
m_pMainToolBar->addAction(action3);
|
||||||
|
|
||||||
// 将工具栏的 widget 设置为包含图标和占位符的 widget
|
// 将工具栏的 widget 设置为包含图标和占位符的 widget
|
||||||
|
@ -134,7 +144,8 @@ void MainDialog::CreateToolbar()
|
||||||
|
|
||||||
// Connect actions to slots
|
// Connect actions to slots
|
||||||
connect(action1, &QAction::triggered, this, &MainDialog::onToolButton1Clicked);
|
connect(action1, &QAction::triggered, this, &MainDialog::onToolButton1Clicked);
|
||||||
connect(action2, &QAction::triggered, this, &MainDialog::onToolButton1Clicked);
|
connect(action2, &QAction::triggered, this, &MainDialog::onToolButton2Clicked);
|
||||||
|
connect(action4, &QAction::triggered, this, &MainDialog::onToolRefreshClicked);
|
||||||
connect(action3, &QAction::triggered, this, &MainDialog::onAboutButtonClicked);
|
connect(action3, &QAction::triggered, this, &MainDialog::onAboutButtonClicked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,18 +211,26 @@ void MainDialog::loadWindowState()
|
||||||
restoreState(settings.value("windowState").toByteArray());
|
restoreState(settings.value("windowState").toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//增加设备
|
||||||
void MainDialog::onToolButton1Clicked()
|
void MainDialog::onToolButton1Clicked()
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, "Button Clicked", "Button 1 was clicked!");
|
QMessageBox::information(this, "Button Clicked", "Button 1 was clicked!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//删除设备
|
||||||
void MainDialog::onToolButton2Clicked()
|
void MainDialog::onToolButton2Clicked()
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, "Button Clicked", "Button 2 was clicked!");
|
QMessageBox::information(this, "Button Clicked", "Button 2 was clicked!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//关于
|
||||||
void MainDialog::onAboutButtonClicked()
|
void MainDialog::onAboutButtonClicked()
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, "Button Clicked", "About");
|
QMessageBox::information(this, "Button Clicked", "About");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//刷新
|
||||||
|
void MainDialog::onToolRefreshClicked()
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, "Refresh Button Clicked", "Refresh");
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef MAINDIALOG_H
|
#ifndef MAINDIALOG_H
|
||||||
#define MAINDIALOG_H
|
#define MAINDIALOG_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
|
@ -8,7 +9,8 @@
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui
|
||||||
|
{
|
||||||
class MainDialog;
|
class MainDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +33,7 @@ public slots:
|
||||||
private slots:
|
private slots:
|
||||||
void onToolButton1Clicked();
|
void onToolButton1Clicked();
|
||||||
void onToolButton2Clicked();
|
void onToolButton2Clicked();
|
||||||
|
void onToolRefreshClicked();
|
||||||
void onAboutButtonClicked();
|
void onAboutButtonClicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -29,7 +29,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
QRegularExpressionValidator* ipValidator = new QRegularExpressionValidator(rx, this);
|
QRegularExpressionValidator* ipValidator = new QRegularExpressionValidator(rx, this);
|
||||||
ui->serverIp->setValidator(ipValidator);
|
ui->serverIp->setValidator(ipValidator);
|
||||||
//setIp("127.0.0.1");
|
//setIp("127.0.0.1");
|
||||||
setIp("192.168.4.254");
|
setIp("192.168.10.254");
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
@ -47,15 +47,7 @@ void MainWindow::setIp(const QString &ip)
|
||||||
ui->serverIp->setText(ip);
|
ui->serverIp->setText(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_pb_Logon_clicked()
|
bool MainWindow::testDatabase()
|
||||||
{
|
|
||||||
m_pMainDialog = new MainDialog();
|
|
||||||
m_pMainDialog->show();
|
|
||||||
this->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::on_pb_Test_clicked()
|
|
||||||
{
|
{
|
||||||
QString svr = ui->serverIp->text();
|
QString svr = ui->serverIp->text();
|
||||||
std::string dbserver = svr.toStdString(); //"tcp://192.168.4.254";
|
std::string dbserver = svr.toStdString(); //"tcp://192.168.4.254";
|
||||||
|
@ -67,12 +59,33 @@ void MainWindow::on_pb_Test_clicked()
|
||||||
if (!dbok)
|
if (!dbok)
|
||||||
{
|
{
|
||||||
hloge("failed to open database, exit now...");
|
hloge("failed to open database, exit now...");
|
||||||
QMessageBox::critical(this, tr("Critical Message"),tr("Failed to connect to device!"));
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hlogi("database connection test successfully!");
|
hlogi("database connection test successfully!");
|
||||||
|
return true;
|
||||||
QMessageBox::information(this, tr("Successfully"),tr("Connect to device successfully!"));
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_pb_Logon_clicked()
|
||||||
|
{
|
||||||
|
if (testDatabase())
|
||||||
|
{
|
||||||
|
m_pMainDialog = new MainDialog();
|
||||||
|
m_pMainDialog->show();
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Critical Message"),tr("Failed to retrieve device data!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::on_pb_Test_clicked()
|
||||||
|
{
|
||||||
|
if (testDatabase())
|
||||||
|
QMessageBox::information(this, tr("Successfully"),tr("Connect to device successfully!"));
|
||||||
|
else
|
||||||
|
QMessageBox::critical(this, tr("Critical Message"),tr("Failed to connect to device!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef MAINWINDOW_H
|
#ifndef MAINWINDOW_H
|
||||||
#define MAINWINDOW_H
|
#define MAINWINDOW_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
|
@ -22,6 +23,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setIp(const QString &ip);
|
void setIp(const QString &ip);
|
||||||
|
bool testDatabase();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_pb_Logon_clicked();
|
void on_pb_Logon_clicked();
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>160</x>
|
<x>120</x>
|
||||||
<y>183</y>
|
<y>183</y>
|
||||||
<width>61</width>
|
<width>101</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>250</x>
|
<x>250</x>
|
||||||
<y>180</y>
|
<y>180</y>
|
||||||
<width>124</width>
|
<width>121</width>
|
||||||
<height>23</height>
|
<height>23</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -182,9 +182,9 @@
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>160</x>
|
<x>120</x>
|
||||||
<y>207</y>
|
<y>207</y>
|
||||||
<width>68</width>
|
<width>111</width>
|
||||||
<height>30</height>
|
<height>30</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -195,9 +195,9 @@
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>160</x>
|
<x>120</x>
|
||||||
<y>240</y>
|
<y>240</y>
|
||||||
<width>56</width>
|
<width>101</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include <hv/hlog.h>
|
#include <hv/hlog.h>
|
||||||
|
#include "ziputils.h"
|
||||||
|
#include "kutilities.h"
|
||||||
|
|
||||||
#ifdef _USING_MYSQL_CONNECTOR_
|
#ifdef _USING_MYSQL_CONNECTOR_
|
||||||
#include <mysql_connection.h>
|
#include <mysql_connection.h>
|
||||||
|
@ -108,7 +110,7 @@ bool MysqlUtils::OpenDatabase(const std::string& server, int dbport, const std::
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = mysql_use_result(m_DbConnection); // 获取结果集
|
res = mysql_use_result(m_DbConnection);
|
||||||
|
|
||||||
while ((row = mysql_fetch_row(res)) != NULL)
|
while ((row = mysql_fetch_row(res)) != NULL)
|
||||||
{
|
{
|
||||||
|
@ -119,7 +121,7 @@ bool MysqlUtils::OpenDatabase(const std::string& server, int dbport, const std::
|
||||||
qDebug() << "\r\n";
|
qDebug() << "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
mysql_free_result(res); // 释放结果集资源
|
mysql_free_result(res);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +144,60 @@ void MysqlUtils::CloseDatabase()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _USING_MYSQL_51_LIB_
|
#ifdef _USING_MYSQL_51_LIB_
|
||||||
mysql_close(m_DbConnection); // 关闭连接
|
mysql_close(m_DbConnection);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MysqlUtils::RetrieveTableData(TableData& tbl_data)
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
MYSQL_RES* res;
|
||||||
|
MYSQL_ROW row;
|
||||||
|
//执行SQL 查询
|
||||||
|
if (mysql_query(m_DbConnection, "SELECT * FROM `hjems`.`tbl_data` ORDER BY data_timestamp LIMIT 0,100"))
|
||||||
|
{
|
||||||
|
hloge( "Error: %s", mysql_error(m_DbConnection) ) ;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = mysql_use_result(m_DbConnection);
|
||||||
|
|
||||||
|
while ((row = mysql_fetch_row(res)) != NULL)
|
||||||
|
{
|
||||||
|
ModelItem item;
|
||||||
|
// item.status = STATUS_WARN;
|
||||||
|
// item.ParameterName= "Visual Leak Detector detected 1 memory leak (84 bytes)";
|
||||||
|
// item.sampleTime = "2024-9-10 11:22:33.444";
|
||||||
|
// item.unit = "C";
|
||||||
|
// item.value = "100";
|
||||||
|
// tbl_data.append(item);
|
||||||
|
|
||||||
|
std::string buf;
|
||||||
|
for (unsigned int i = 0; i < mysql_num_fields(res); ++i)
|
||||||
|
{
|
||||||
|
qDebug() << mysql_fetch_field_direct(res,i)->name ;
|
||||||
|
QString field_name (mysql_fetch_field_direct(res,i)->name);
|
||||||
|
if (field_name == "data_timestamp")
|
||||||
|
{
|
||||||
|
item.sampleTime = row[i];
|
||||||
|
qDebug() << row[i];
|
||||||
|
}
|
||||||
|
else if (field_name == "data_content")
|
||||||
|
{
|
||||||
|
std::string v(row[i]);
|
||||||
|
qDebug() << Kutilities::printHex(v.c_str(),v.length()).c_str();
|
||||||
|
ZipUtils::DecompressString(v.c_str(),v.length(),buf);
|
||||||
|
qDebug() << buf.c_str();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qDebug() << "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long row_count = res->row_count;
|
||||||
|
|
||||||
|
mysql_free_result(res);
|
||||||
|
|
||||||
|
return row_count;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef MYSQLUTILS_H
|
#ifndef MYSQLUTILS_H
|
||||||
#define MYSQLUTILS_H
|
#define MYSQLUTILS_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -13,9 +14,11 @@
|
||||||
|
|
||||||
#ifdef _USING_MYSQL_51_LIB_
|
#ifdef _USING_MYSQL_51_LIB_
|
||||||
#include <WinSock2.h>
|
#include <WinSock2.h>
|
||||||
#include <mysql.h> // MySQL C API 头文件
|
#include <mysql.h> //MySQL C API include file
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "globalparameters.h"
|
||||||
|
|
||||||
class MysqlUtils
|
class MysqlUtils
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
@ -28,6 +31,7 @@ public:
|
||||||
void CloseDatabase();
|
void CloseDatabase();
|
||||||
bool OpenDatabase(const std::string& server = "127.0.0.1", int dbport = 3306, const std::string& dbuser = "root", const std::string& dbpasswd = "Hj57471000", const std::string& database="hjems");
|
bool OpenDatabase(const std::string& server = "127.0.0.1", int dbport = 3306, const std::string& dbuser = "root", const std::string& dbpasswd = "Hj57471000", const std::string& database="hjems");
|
||||||
|
|
||||||
|
int RetrieveTableData(TableData& tbl_data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef _USING_QT_MYSQL_CONNECTOR_
|
#ifdef _USING_QT_MYSQL_CONNECTOR_
|
||||||
|
|
|
@ -5,16 +5,6 @@
|
||||||
MyTableModel::MyTableModel(QObject* parent)
|
MyTableModel::MyTableModel(QObject* parent)
|
||||||
:QAbstractTableModel(parent)
|
:QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
for(int i=0;i<100;i++)
|
|
||||||
{
|
|
||||||
ModelItem item;
|
|
||||||
item.status = STATUS_WARN;
|
|
||||||
item.ParameterName= "Visual Leak Detector detected 1 memory leak (84 bytes)";
|
|
||||||
item.sampleTime = "2024-9-10 11:22:33.444";
|
|
||||||
item.unit = "C";
|
|
||||||
item.value = "100";
|
|
||||||
m_modelData.append(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int MyTableModel::rowCount(const QModelIndex & /*parent*/) const
|
int MyTableModel::rowCount(const QModelIndex & /*parent*/) const
|
||||||
|
@ -48,9 +38,12 @@ QVariant MyTableModel::data(const QModelIndex& index, int role) const
|
||||||
{
|
{
|
||||||
return m_modelData.at(row).ParameterName.c_str();
|
return m_modelData.at(row).ParameterName.c_str();
|
||||||
}
|
}
|
||||||
case 2: return m_modelData.at(row).value.c_str();
|
case 2:
|
||||||
case 3: return m_modelData.at(row).unit.c_str();
|
return m_modelData.at(row).value.c_str();
|
||||||
case 4: return m_modelData.at(row).sampleTime.c_str();
|
case 3:
|
||||||
|
return m_modelData.at(row).unit.c_str();
|
||||||
|
case 4:
|
||||||
|
return m_modelData.at(row).sampleTime.c_str();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#pragma execution_character_set("utf-8")
|
#ifndef MYTABLEMODEL_H
|
||||||
|
|
||||||
#ifndef MYTABLEMODEL_H
|
|
||||||
#define MYTABLEMODEL_H
|
#define MYTABLEMODEL_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
|
<RCC>
|
||||||
<RCC warning="WARNING! File created programmatically. All changes made in this file will be lost!">
|
<qresource prefix="/bingle_icons/bingle">
|
||||||
<qresource prefix="bingle_icons/bingle">
|
|
||||||
<file>QSS_IMG/go-down-symbolic.symbolic.png</file>
|
<file>QSS_IMG/go-down-symbolic.symbolic.png</file>
|
||||||
<file>QSS_IMG/go-next-symbolic.symbolic.png</file>
|
<file>QSS_IMG/go-next-symbolic.symbolic.png</file>
|
||||||
<file>QSS_IMG/go-previous-symbolic.symbolic.png</file>
|
<file>QSS_IMG/go-previous-symbolic.symbolic.png</file>
|
||||||
<file>QSS_IMG/go-up-symbolic.symbolic.png</file>
|
<file>QSS_IMG/go-up-symbolic.symbolic.png</file>
|
||||||
<file>QSS_IMG/object-select-symbolic.symbolic.png</file>
|
<file>QSS_IMG/object-select-symbolic.symbolic.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="bingle/bingle">
|
<qresource prefix="/bingle/bingle">
|
||||||
<file>AMOLED.qss</file>
|
<file>AMOLED.qss</file>
|
||||||
<file>Aqua.qss</file>
|
<file>Aqua.qss</file>
|
||||||
<file>ConsoleStyle.qss</file>
|
<file>ConsoleStyle.qss</file>
|
||||||
|
@ -17,5 +16,6 @@
|
||||||
<file>MaterialDark.qss</file>
|
<file>MaterialDark.qss</file>
|
||||||
<file>NeonButtons.qss</file>
|
<file>NeonButtons.qss</file>
|
||||||
<file>Ubuntu.qss</file>
|
<file>Ubuntu.qss</file>
|
||||||
|
<file>material-blue.qss</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -0,0 +1,426 @@
|
||||||
|
QWidget:window { /* Borders around the code editor and debug window */
|
||||||
|
border: 0px solid #263238;
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolTip {
|
||||||
|
background-color: #80CBC4;
|
||||||
|
color: black;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 0;
|
||||||
|
opacity: 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==================== Dialog ==================== */
|
||||||
|
QLabel {
|
||||||
|
background: transparent;
|
||||||
|
color: #CFD8DC; /* Not sure about this one */
|
||||||
|
}
|
||||||
|
|
||||||
|
QDialog, QListView {
|
||||||
|
background-color: #263238;
|
||||||
|
color: #546E7A;
|
||||||
|
outline: 0;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QListView::item:hover {
|
||||||
|
color: #AFBDC4;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QListView::item:selected {
|
||||||
|
color: #ffffff;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === QTabBar === */
|
||||||
|
QTabBar {
|
||||||
|
background: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabWidget::pane {
|
||||||
|
background: transparent; /* Only at the very bottom of the tabs */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabBar::tab {
|
||||||
|
background: transparent;
|
||||||
|
border: 0px solid transparent;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
color: #546E7A;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabBar::tab:hover {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0px solid transparent;
|
||||||
|
border-bottom: 2px solid #80CBC4;
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabBar::tab:selected {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0px solid transparent;
|
||||||
|
border-top: none;
|
||||||
|
border-bottom: 2px solid #80CBC4;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStackedWidget {
|
||||||
|
background: #263238; /* This covers a bunch of things, I was thinking about making it transparent, */
|
||||||
|
/* but I would have to find all the other elements... but QTabWidget::pane may be it */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* === QGroupBox === */
|
||||||
|
QGroupBox {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
QGroupBox::title {
|
||||||
|
color: #80CBC4;
|
||||||
|
subcontrol-origin: margin;
|
||||||
|
left: 6px;
|
||||||
|
padding: 0 3px 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QComboBox {
|
||||||
|
color: #546E7A;
|
||||||
|
background-color: transparent;
|
||||||
|
selection-background-color: transparent;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QComboBox QAbstractItemView
|
||||||
|
{
|
||||||
|
selection-background-color: transparent;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === QCheckBox === */
|
||||||
|
QCheckBox, QRadioButton {
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox::indicator::unchecked {
|
||||||
|
background-color: #263238;
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRadioButton::indicator::unchecked {
|
||||||
|
background-color: #263238;
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox::indicator::checked, QTreeView::indicator::checked {
|
||||||
|
background-color: qradialgradient(cx:0.5, cy:0.5, fx:0.25, fy:0.15, radius:0.3, stop:0 #80CBC4, stop:1 #263238);
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRadioButton::indicator::checked {
|
||||||
|
background-color: qradialgradient(cx:0.5, cy:0.5, fx:0.25, fy:0.15, radius:0.3, stop:0 #80CBC4, stop:1 #263238);
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox::indicator:disabled, QRadioButton::indicator:disabled, QTreeView::indicator:disabled {
|
||||||
|
background-color: #444444; /* Not sure what this looks like */
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox::indicator::checked:disabled, QRadioButton::indicator::checked:disabled, QTreeView::indicator::checked:disabled {
|
||||||
|
background-color: qradialgradient(cx:0.5, cy:0.5, fx:0.25, fy:0.15, radius:0.3, stop:0 #BBBBBB, stop:1 #444444); /* Not sure what this looks like */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #546E7A;
|
||||||
|
outline: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::item:hover {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::item:selected {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView QHeaderView:section {
|
||||||
|
background-color: #263238;
|
||||||
|
color: #CFD8DC;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::indicator:checked {
|
||||||
|
background-color: qradialgradient(cx:0.5, cy:0.5, fx:0.25, fy:0.15, radius:0.3, stop:0 #80CBC4, stop:1 #263238);
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
selection-background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::indicator:unchecked { /* This and the one above style the checkbox in the Options -> Keyboard */
|
||||||
|
background-color: #263238; /* This is still a hover over in blue I can't get rid of */
|
||||||
|
border: 1px solid #536D79;
|
||||||
|
selection-background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*QTreeView QScrollBar {
|
||||||
|
background-color: #263238
|
||||||
|
}*/
|
||||||
|
|
||||||
|
QTreeView::branch {
|
||||||
|
/* Skip - applies to everything */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:has-siblings:adjoins-item {
|
||||||
|
/* Skip - files */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:has-siblings:!adjoins-item {
|
||||||
|
/* Skip - applies to almost all on the left side */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:closed:has-children:has-siblings {
|
||||||
|
background: url('./images/rightarrowgray.png') center center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:has-children:!has-siblings:closed {
|
||||||
|
background: url('./images/rightarrowgray.png') center center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
|
||||||
|
/* Skip - files */
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:open:has-children:has-siblings {
|
||||||
|
background: url('./images/downarrowgray.png') center center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::branch:open:has-children:!has-siblings {
|
||||||
|
background: url('./images/downarrowgray.png') center center no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === QScrollBar:horizontal === */
|
||||||
|
QScrollBar:horizontal {
|
||||||
|
background: #263238; /* Background where slider is not */
|
||||||
|
height: 10px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar:vertical {
|
||||||
|
background: #263238; /* Background where slider is not */
|
||||||
|
width: 10px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::handle:horizontal {
|
||||||
|
background: #37474F; /* Slider color */
|
||||||
|
min-width: 16px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::handle:vertical {
|
||||||
|
background: #37474F; /* Slider color */
|
||||||
|
min-height: 16px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal,
|
||||||
|
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
|
||||||
|
background: none; /* Removes the dotted background */
|
||||||
|
}
|
||||||
|
|
||||||
|
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal,
|
||||||
|
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { /* Hides the slider arrows */
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #546E7A;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
padding: 4px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
QLineEdit {
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
color: #546E7A;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSpinBox {
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
color: #546E7A;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Main Screen
|
||||||
|
*****************************************************************************/
|
||||||
|
QTreeView {
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu {
|
||||||
|
background-color: #263238; /* File Menu Background color */
|
||||||
|
color: #546E7A;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu::item:selected {
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu::item:pressed {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu::separator {
|
||||||
|
height: 1px;
|
||||||
|
background: transparent; /* Could change this to #546E7A and reduce the margin top and bottom to 1px */
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === QMenuBar === */
|
||||||
|
QMenuBar {
|
||||||
|
background-color: #263238;
|
||||||
|
color: #546E7A;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenuBar::item {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenuBar::item:disabled {
|
||||||
|
color: gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenuBar::item:selected {
|
||||||
|
color: #AFBDC4;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenuBar::item:pressed {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolBar {
|
||||||
|
background: #263238;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolBar:handle {
|
||||||
|
background: transparent;
|
||||||
|
border-left: 2px dotted #80CBC4; /* Fix the 4 handle dots so it doesn't look crappy */
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolBar::separator {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === QToolButton === */
|
||||||
|
QToolButton:hover, QToolButton:pressed {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton::menu-button {
|
||||||
|
background: url('./images/downarrowgray.png') center center no-repeat;
|
||||||
|
background-color: #263238; /* This needs to be set to ensure the other brown arrows don't show */
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton::menu-button:hover, QToolButton::menu-button:pressed {
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStatusBar {
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QLabel {
|
||||||
|
color: #546E7A; /* Text at the bottom right corner of the screen */
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton { /* I don't like how the items depress */
|
||||||
|
color: #546E7A;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton:hover, QToolButton:pressed, QToolButton:checked {
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton:hover {
|
||||||
|
color: #AFBDC4;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton:checked, QToolButton:pressed {
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QToolButton {
|
||||||
|
border: 1px solid transparent;
|
||||||
|
margin: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton:hover {
|
||||||
|
background-color: transparent; /* I don't like how the down arrows in the top menu bar move down when clicked */
|
||||||
|
border: 1px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton[popupMode="1"] { /* only for MenuButtonPopup */
|
||||||
|
padding-right: 20px; /* make way for the popup button */
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton::menu-button {
|
||||||
|
border-left: 1px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QToolButton::menu-button:hover {
|
||||||
|
border-left: 1px solid transparent;
|
||||||
|
background: transparent;
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStatusBar::item {
|
||||||
|
color: #546E7A;
|
||||||
|
background-color: #263238;
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractScrollArea { /* Borders around the code editor and debug window */
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
Play around with these settings
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/* Force the dialog's buttons to follow the Windows guidelines. */
|
||||||
|
QDialogButtonBox {
|
||||||
|
button-layout: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTabWidget::tab-bar {
|
||||||
|
left: 0px; /* Test this out on OS X, it will affect the tabs in the Options Dialog, on OS X they are centered */
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
#ifndef SINGLETON_H
|
#ifndef SINGLETON_H
|
||||||
#define SINGLETON_H
|
#define SINGLETON_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class Singleton
|
class Singleton
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#ifndef ZIPUTILS_H
|
#ifndef ZIPUTILS_H
|
||||||
#define ZIPUTILS_H
|
#define ZIPUTILS_H
|
||||||
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class ZipUtils
|
class ZipUtils
|
||||||
|
|
Loading…
Reference in New Issue