settingdlg.cpp

来自「Qt开发的GRE背单词软件」· C++ 代码 · 共 301 行

CPP
301
字号
#include "SettingDlg.h"
#include "Library.h"
#include "UserSetting.h"
#include <QFontDialog>
#include <QColorDialog>
#include <QPixmap>
#include <QImage>
#include <QtSql/QSqlQuery>
#include <QFileDialog>
#include <QMessageBox>

SettingDlg::SettingDlg(const QString& user, QWidget *parent)
	: QDialog(parent), userName(user)
{
	ui.setupUi(this);

	connect(ui.buttonTableFont,       SIGNAL(clicked()), this, SLOT(slotSetTableFont()));
	connect(ui.buttonWordFont,        SIGNAL(clicked()), this, SLOT(slotSetWordFont()));
	connect(ui.buttonPhoneticFont,    SIGNAL(clicked()), this, SLOT(slotSetPhoneticFont()));
	connect(ui.buttonChineseFont,     SIGNAL(clicked()), this, SLOT(slotSetChineseFont()));
	connect(ui.buttonNoteFont,        SIGNAL(clicked()), this, SLOT(slotSetNoteFont()));
	connect(ui.buttonGUIFont,         SIGNAL(clicked()), this, SLOT(slotSetGUIFont()));
	connect(ui.buttonNewColor,        SIGNAL(clicked()), this, SLOT(slotSetNewColor()));
	connect(ui.buttonUnfamiliarColor, SIGNAL(clicked()), this, SLOT(slotSetUnfamiliarColor()));
	connect(ui.buttonFamiliarColor,   SIGNAL(clicked()), this, SLOT(slotSetFamiliarColor()));
	connect(ui.buttonPhoneticColor,   SIGNAL(clicked()), this, SLOT(slotSetPhoneticColor()));
	connect(ui.buttonWav,             SIGNAL(clicked()), this, SLOT(slotSetWavDir()));
	connect(ui.buttonMp3,             SIGNAL(clicked()), this, SLOT(slotSetMp3Dir()));
	connect(ui.buttonDBFile,          SIGNAL(clicked()), this, SLOT(slotSetDBFileName()));
	connect(ui.checkBoxAutoHide,   SIGNAL(toggled(bool)), this, SLOT(slotSetAutoHide  (bool)));
	connect(ui.checkBoxAutoBackup, SIGNAL(toggled(bool)), this, SLOT(slotSetAutoBackup(bool)));
}

QString SettingDlg::getRightShortcut() const { 
	return ui.lineEditRightShortcut->text(); 
}
QString SettingDlg::getWrongShortcut() const {
	return ui.lineEditWrongShortcut->text(); 
}
QString SettingDlg::getChineseShortcut() const {
	return ui.lineEditChineseShortcut->text(); 
}
QString SettingDlg::getSetFamiliarShortcut() const { 
	return ui.lineEditSetFamiliarShortcut->text(); 
}

void SettingDlg::setRightShortcut(const QString& shortcut) {
	ui.lineEditRightShortcut->setText(shortcut);
}
void SettingDlg::setWrongShortcut(const QString& shortcut) {
	ui.lineEditWrongShortcut->setText(shortcut);
}
void SettingDlg::setChineseShortcut(const QString& shortcut) {
	ui.lineEditChineseShortcut->setText(shortcut);
}
void SettingDlg::setSetFamiliarShortcut(const QString& shortcut) {
	ui.lineEditSetFamiliarShortcut->setText(shortcut);
}

void SettingDlg::slotSetTableFont() {
	setTableFont(QFontDialog::getFont(0, getTableFont(), this));
}
void SettingDlg::slotSetWordFont() {
	setWordFont(QFontDialog::getFont(0, getWordFont(), this));
}
void SettingDlg::slotSetChineseFont() {
	setChineseFont(QFontDialog::getFont(0, getChineseFont(), this));
}
void SettingDlg::slotSetPhoneticFont() {
	setPhoneticFont(QFontDialog::getFont(0, getPhoneticFont(), this));
}
void SettingDlg::slotSetNoteFont() {
	setNoteFont(QFontDialog::getFont(0, getNoteFont(), this));
}
void SettingDlg::slotSetGUIFont() {
	setGUIFont(QFontDialog::getFont(0, getGUIFont(), this));
}

QColor SettingDlg::getNewWordColor() const {
	return ui.labelNewColor->pixmap()->toImage().pixel(0, 0);
}
QColor SettingDlg::getUnfamiliarColor() const {
	return ui.labelUnfamiliarColor->pixmap()->toImage().pixel(0, 0);
}
QColor SettingDlg::getFamiliarColor() const {
	return ui.labelFamiliarColor->pixmap()->toImage().pixel(0, 0);
}
QColor SettingDlg::getPhoneticColor() const {
	return ui.labelPhoneticColor->pixmap()->toImage().pixel(0, 0);
}
QString SettingDlg::getWavDir() const {
	return ui.lineEditWav->text();
}
QString SettingDlg::getMp3Dir() const {
	return ui.lineEditMp3->text();
}
bool SettingDlg::getAutoBackup() const {
	return ui.checkBoxAutoBackup->isChecked();
}
int SettingDlg::getBackupDays() const {
	return ui.spinBoxBackupDays->value();
}
QString SettingDlg::getDBFileName() const {
	return ui.lineEditDBFile->text();
}
QString SettingDlg::getFilteredChar() const {
	return ui.lineEditFilteredChar->text();
}
bool SettingDlg::getAutoHide() const {
	return ui.checkBoxAutoHide->isChecked();
}
int SettingDlg::getHideDelay() const {
	return ui.spinBoxHideDelay->value();
}
int SettingDlg::getShowDelay() const {
	return ui.spinBoxShowDelay->value();
}
void SettingDlg::setAutoHide(bool hide) {
	ui.checkBoxAutoHide->setChecked(hide);
}
void SettingDlg::setHideDelay(int delay) {
	ui.spinBoxHideDelay->setValue(delay);
}
void SettingDlg::setShowDelay(int delay) {
	ui.spinBoxShowDelay->setValue(delay);
}
void SettingDlg::setDBFileName(const QString& name) {
	ui.lineEditDBFile->setText(name);
}
void SettingDlg::setAutoBackup(bool backup) {
	ui.checkBoxAutoBackup->setChecked(backup);
}
void SettingDlg::setWavDir(const QString& dir) {
	ui.lineEditWav->setText(dir);
}
void SettingDlg::setMp3Dir(const QString& dir) {
	ui.lineEditMp3->setText(dir);
}
void SettingDlg::setFilteredChar(const QString& chars) {
	ui.lineEditFilteredChar->setText(chars);
}
void SettingDlg::setBackupDays(int days) {
	ui.spinBoxBackupDays->setValue(days);
}
void SettingDlg::setNewWordColor(const QColor& color)
{
	QPixmap pixmap(ui.labelNewColor->width(), ui.labelNewColor->height());
	pixmap.fill(color);
	ui.labelNewColor->setPixmap(pixmap);
}
void SettingDlg::setUnfamiliarColor(const QColor& color)
{
	QPixmap pixmap(ui.labelUnfamiliarColor->width(), ui.labelUnfamiliarColor->height());
	pixmap.fill(color);
	ui.labelUnfamiliarColor->setPixmap(pixmap);
}

void SettingDlg::setFamiliarColor(const QColor& color)
{
	QPixmap pixmap(ui.labelFamiliarColor->width(), ui.labelFamiliarColor->height());
	pixmap.fill(color);
	ui.labelFamiliarColor->setPixmap(pixmap);
}

void SettingDlg::setPhoneticColor(const QColor& color)
{
	QPixmap pixmap(ui.labelPhoneticColor->width(), ui.labelPhoneticColor->height());
	pixmap.fill(color);
	ui.labelPhoneticColor->setPixmap(pixmap);
}

void SettingDlg::slotSetNewColor()
{
	QColor color = QColorDialog::getColor(getNewWordColor(), this);
	if(color.isValid())
		setNewWordColor(color);
}

void SettingDlg::slotSetUnfamiliarColor()
{
	QColor color = QColorDialog::getColor(getUnfamiliarColor(), this);
	if(color.isValid())
		setUnfamiliarColor(color);
}

void SettingDlg::slotSetFamiliarColor()
{
	QColor color = QColorDialog::getColor(getFamiliarColor(), this);
	if(color.isValid())
		setFamiliarColor(color);
}

void SettingDlg::slotSetPhoneticColor()
{
	QColor color = QColorDialog::getColor(getPhoneticColor(), this);
	if(color.isValid())
		setPhoneticColor(color);
}

void SettingDlg::importSetting(const UserSetting &setting)
{
	UserSetting* globalSetting = UserSetting::getInstance("Global");
	setWavDir    (globalSetting->value("WavDir").toString());
	setMp3Dir    (globalSetting->value("Mp3Dir").toString());
	setDBFileName(globalSetting->value("dbFileName").toString());

	setTableFont   (setting.getFont("tableFont"));
	setWordFont    (setting.getFont("wordFont"));
	setChineseFont (setting.getFont("chineseFont"));
	setPhoneticFont(setting.getFont("phoneticFont"));
	setNoteFont    (setting.getFont("noteFont"));
	setGUIFont     (setting.getFont("guiFont"));
	setNewWordColor   (setting.getColor("newWordColor"));
	setUnfamiliarColor(setting.getColor("unFamiliarColor"));
	setFamiliarColor  (setting.getColor("familiarColor"));
	setPhoneticColor  (setting.getColor("phoneticColor"));
	setRightShortcut      (setting.getShortcut("rightShortcut"));
	setWrongShortcut      (setting.getShortcut("wrongShortcut"));
	setChineseShortcut    (setting.getShortcut("chineseShortcut"));
	setSetFamiliarShortcut(setting.getShortcut("setFamiliarShortcut"));
	setAutoBackup(setting.value("Other/autoBackup").toBool());
	slotSetAutoBackup(setting.value("Other/autoBackup").toBool());  // can't trigger slot, why??
	setBackupDays(setting.value("Other/backupDays").toInt());

	setFilteredChar(setting.value("Other/filteredChar").toString());
	setAutoHide (setting.value("LeftPanel/autoHide") .toBool());
	setHideDelay(setting.value("LeftPanel/hideDelay").toInt());
	setShowDelay(setting.value("LeftPanel/showDelay").toInt());
}

UserSetting& SettingDlg::exportSetting() const
{
	UserSetting* globalSetting = UserSetting::getInstance("Global");
	globalSetting->setValue("WavDir",     getWavDir());
	globalSetting->setValue("Mp3Dir",     getMp3Dir());
	globalSetting->setValue("dbFileName", getDBFileName());

	UserSetting* result = UserSetting::getInstance(userName);
	result->setFont("tableFont",    getTableFont());
	result->setFont("wordFont",     getWordFont());
	result->setFont("chineseFont",  getChineseFont());
	result->setFont("phoneticFont", getPhoneticFont());
	result->setFont("noteFont",     getNoteFont());
	result->setFont("guiFont",      getGUIFont());
	result->setColor("newWordColor",    getNewWordColor());
	result->setColor("unFamiliarColor", getUnfamiliarColor());
	result->setColor("familiarColor",   getFamiliarColor());
	result->setColor("phoneticColor",   getPhoneticColor());
	result->setShortcut("rightShortcut",       getRightShortcut());
	result->setShortcut("wrongShortcut",       getWrongShortcut());
	result->setShortcut("chineseShortcut",     getChineseShortcut());
	result->setShortcut("setFamiliarShortcut", getSetFamiliarShortcut());
	result->setValue("Other/autoBackup",   getAutoBackup());
	result->setValue("Other/backupDays",   getBackupDays());
	result->setValue("Other/filteredChar", getFilteredChar());
	result->setValue("LeftPanel/autoHide",  getAutoHide());
	result->setValue("LeftPanel/hideDelay", getHideDelay());
	result->setValue("LeftPanel/showDelay", getShowDelay());
	return *result;
}

void SettingDlg::accept() 
{
	exportSetting();
	QDialog::accept();
}

void SettingDlg::slotSetWavDir()
{
	QString dir = QFileDialog::getExistingDirectory(this, tr("选择文件夹"), getWavDir());
	if(!dir.isEmpty())
		setWavDir(dir);
}

void SettingDlg::slotSetMp3Dir()
{
	QString dir = QFileDialog::getExistingDirectory(this, tr("选择文件夹"), getMp3Dir());
	if(!dir.isEmpty())
		setMp3Dir(dir);
}

void SettingDlg::slotSetDBFileName()
{
	QString fileName = QFileDialog::getOpenFileName(this, tr("选择数据库文件"),
                                                 ".", tr("数据库文件(*.db);;所有文件(*.*)"));
	if(!fileName.isEmpty())
	{
		setDBFileName(fileName);
		QMessageBox::information(this, tr("确定"), tr("重启程序后生效"));
	}
}

void SettingDlg::slotSetAutoHide(bool hide)
{
	ui.spinBoxHideDelay->setEnabled(hide);
	ui.spinBoxShowDelay->setEnabled(hide);
}

void SettingDlg::slotSetAutoBackup(bool hide) {
	ui.spinBoxBackupDays->setEnabled(hide);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?