diff --git a/.gitignore b/.gitignore index 567609b..a0b1915 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build/ +pkg/ diff --git a/MrHash.pro b/MrHash.pro index 64d147d..14c861c 100644 --- a/MrHash.pro +++ b/MrHash.pro @@ -33,7 +33,8 @@ FORMS += mainwindow.ui about.ui RESOURCES += res/icon.qrc -TRANSLATIONS = t1_it.ts qt_it.ts +# Coming soon... +#TRANSLATIONS = t1_it.ts qt_it.ts ########################### CONFIGURATION ############################ CONFIG += c++14 diff --git a/README.md b/README.md index e12c898..0d5ed8b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ -# mrhash -Mr. Hash is a program that calculates many hash strings (MD4, MD5, SHA1, SHA256, SHA384, SHA512, Tiger, HAVAL, RIPE-MD, CRC32...) of a given text. +# Mr. Hash +Mr. Hash calculates in real-time many hash strings of a given text. + +![](http://img.shields.io/badge/version-v0.2.0-red.svg?style=flat) ![](https://img.shields.io/badge/platform-windows | linux | mac-yellow.svg?style=flat) ![](http://img.shields.io/badge/architecture-x86 | x64-green.svg?style=flat) ![](http://img.shields.io/badge/license-GPL%20v2-blue.svg?style=flat) + +## Screenshots +![](/doc/img/screenshot.png) + +## Supported Algorithms + ++ MD4 ++ MD5 ++ SHA + + SHA1 + + SHA-224 + + SHA-256 + + SHA-384 + + SHA-512 ++ SHA3 + + SHA3-224 + + SHA3-256 + + SHA3-384 + + SHA3-512 ++ Tiger ++ HAVAL ++ RIPEMD ++ CRC16 ++ CRC32 + diff --git a/doc/img/screenshot.png b/doc/img/screenshot.png new file mode 100644 index 0000000..c1c8ee5 Binary files /dev/null and b/doc/img/screenshot.png differ diff --git a/include/crc32.h b/include/crc32.h index 646ccce..e60dcb8 100644 --- a/include/crc32.h +++ b/include/crc32.h @@ -5,7 +5,7 @@ namespace CRC32 { extern int* crc_table; int* generate_table(); int reflect(int data, int bits); - int crc32(int crc, const char* data, int length); + int crc32(int crc, const char* data, unsigned int length); } #endif // _CRC32_H_ diff --git a/src/about.cpp b/src/about.cpp index 1b04329..5f04b42 100644 --- a/src/about.cpp +++ b/src/about.cpp @@ -1,7 +1,14 @@ +#include + #include "about.hpp" About::About( QWidget* parent ) : QDialog( parent ) { setupUi( this ); + this->setFixedSize( this->size() ); + this->setGeometry( QStyle::alignedRect( Qt::LeftToRight, Qt::AlignCenter, this->size(), + qApp->desktop()->availableGeometry() ) ); + tabWidget->setCurrentIndex( 0 ); + versionLabel->setText( QString("v%1.%2.%3").arg(MAJOR_VER).arg(MINOR_VER).arg(PATCH_VER) ); } About::~About() {} diff --git a/src/crc32.cpp b/src/crc32.cpp index 299205e..789ddb3 100644 --- a/src/crc32.cpp +++ b/src/crc32.cpp @@ -3,40 +3,36 @@ int* CRC32::crc_table; int* CRC32::generate_table() { - int crc; - int* table = new int[256]; - for(int i = 0; i < 256; i++) { - crc = i << 24; - for(int j = 0; j < 8; j++) { - if(crc & 0x80000000) { - crc = (crc << 1) ^ 0x04c11db7; - } else { - crc = crc << 1; - } - } - table[i] = crc; - } - return table; + int crc; + int* table = new int[256]; + for ( int i = 0; i < 256; i++ ) { + crc = i << 24; + for ( int j = 0; j < 8; j++ ) { + if ( crc & 0x80000000 ) + crc = ( crc << 1 ) ^ 0x04c11db7; + else + crc = crc << 1; + } + table[i] = crc; + } + return table; } -int CRC32::reflect(int data, int bits) { - int x = 0; - for(int i = 0; i < bits; i++) { - x = x << 1; - x |= data & 1; - data = data >> 1; - } - return x; +int CRC32::reflect( int data, int bits ) { + int x = 0; + for ( int i = 0; i < bits; i++ ) { + x = x << 1; + x |= data & 1; + data = data >> 1; + } + return x; } - -int CRC32::crc32(int crc, const char* data, int length) { - crc = ~reflect(crc, 32); - if(!crc_table) { - crc_table = generate_table(); - } - for (int i = 0; i < length; i++) { - crc = (crc << 8) ^ crc_table[((crc >> 24) ^ reflect(data[i], 8)) & 0xff]; - } - return ~reflect(crc, 32); +int CRC32::crc32( int crc, const char* data, unsigned int length ) { + crc = ~reflect( crc, 32 ); + if ( !crc_table ) + crc_table = generate_table(); + for ( unsigned int i = 0; i < length; ++i ) + crc = ( crc << 8 ) ^ crc_table[( ( crc >> 24 ) ^ reflect( data[i], 8 ) ) & 0xff]; + return ~reflect( crc, 32 ); } diff --git a/src/globalstuff.cpp b/src/globalstuff.cpp index 2ae2edd..c08cee2 100644 --- a/src/globalstuff.cpp +++ b/src/globalstuff.cpp @@ -17,37 +17,35 @@ using std::string; -string charToHex(const char *buf, unsigned int len) -{ - // Hm, can be optimized... :) - unsigned int i; - string ret; - char tmp[3], cur; - - for (i = 0; i < len; ++i) { - cur = *(buf + i); - if (cur == 0) { - ret += "00"; - } else { - sprintf(tmp, "%X", 0xFF & *(buf + i)); - if (strlen(tmp) == 1) - ret += '0'; - ret += tmp; - } - } - - return ret; +string charToHex( const char* buf, unsigned int len ) { + // Hm, can be optimized... :) + unsigned int i; + string ret; + char tmp[3], cur; + + for ( i = 0; i < len; ++i ) { + cur = *( buf + i ); + if ( cur == 0 ) + ret += "00"; + else { + sprintf( tmp, "%X", 0xFF & *( buf + i ) ); + if ( strlen( tmp ) == 1 ) + ret += '0'; + ret += tmp; + } + } + + return ret; } -unsigned int calcBufSize(struct stat file_stat) -{ - unsigned int ret; +unsigned int calcBufSize( struct stat file_stat ) { + unsigned int ret; - ret = file_stat.st_size; - if (ret < 100000) - ret = 100000; - else if (ret > 200000) - ret = 200000; + ret = file_stat.st_size; + if ( ret < 100000 ) + ret = 100000; + else if ( ret > 200000 ) + ret = 200000; - return ret; + return ret; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5b769d7..840c94d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -32,7 +32,7 @@ MainWindow::MainWindow( QWidget* parent ) : QMainWindow( parent ) { this->setFixedSize( this->size() ); this->setGeometry( QStyle::alignedRect( Qt::LeftToRight, Qt::AlignCenter, this->size(), qApp->desktop()->availableGeometry() ) ); - this->setWindowTitle("MrHash v" + QString::number(MAJOR_VER) + "." + QString::number(MINOR_VER)); + this->setWindowTitle( "MrHash v" + QString::number( MAJOR_VER ) + "." + QString::number( MINOR_VER ) ); connect( actionAboutQt, SIGNAL( triggered() ), qApp, SLOT( aboutQt() ) ); @@ -40,29 +40,10 @@ MainWindow::MainWindow( QWidget* parent ) : QMainWindow( parent ) { MainWindow::~MainWindow() {} -namespace Hex { - static string digits = "0123456789abcdef"; - std::string hex( char* bin, int length ) { - std::string s( length * 2, ' ' ); - for ( int i = 0; i < length; i++ ) { - s[i * 2] = digits[( bin[i] >> 4 ) & 0xf]; - s[i * 2 + 1] = digits[bin[i] & 0xf]; - } - return s; - } - std::string hex( int bin ) { - std::string s( sizeof( int ) * 2, ' ' ); - for ( unsigned int i = 0; i < sizeof( int ) * 2; i++ ) { - s[sizeof( int ) * 2 - 1 - i] = digits[bin & 0xf]; - bin = bin >> 4; - } - return s; - } -} - QString crc32( string msg ) { int crc32_ctx = CRC32::crc32( 0, msg.c_str(), msg.length() ); - return QString::fromStdString( Hex::hex( crc32_ctx ) ).toUpper(); + //note: right(8) removes the unneeded Fs that appear sometimes at the start of the crc32 + return QString::number(crc32_ctx, 16).right(8).toUpper(); } QString tiger( string msg ) { @@ -84,7 +65,7 @@ void MainWindow::on_textEdit_textChanged() { QString haval224 = QString::fromStdString( hav.calcHaval( text, 224, 5 ) ).toLower(); QString haval256 = QString::fromStdString( hav.calcHaval( text, 256, 5 ) ).toLower(); QString base64 = textEdit->toPlainText().toUtf8().toBase64(); - crc16edit->setText( QString::number(qChecksum(text.c_str(), qstrlen(text.c_str()))) ); + crc16edit->setText( QString::number( qChecksum( text.c_str(), qstrlen( text.c_str() ) ) ) ); crc32edit->setText( crc32( text ) ); md4edit->setText( QCryptographicHash::hash( text.c_str(), QCryptographicHash::Md4 ).toHex() ); md5edit->setText( QCryptographicHash::hash( text.c_str(), QCryptographicHash::Md5 ).toHex() ); diff --git a/ui/about.ui b/ui/about.ui index 82a0b9c..0d7e736 100644 --- a/ui/about.ui +++ b/ui/about.ui @@ -6,220 +6,211 @@ 0 0 - 400 - 383 + 643 + 290 - - - 400 - 383 - - - - - 400 - 383 - - About Mr. Hash - - - - 128 - 30 - 131 - 131 - - - - - - - :/res/icon.png - - - - - - 154 - 10 - 81 - 16 - + + + 5 - - - 12 - 75 - true - + + 5 - - Mr. Hash + + 5 - - - - - 165 - 160 - 91 - 16 - + + 5 - - Version: 1.0 + + 5 - - - - - -1 - 180 - 403 - 205 - - - - 0 - - - - Generale - - - - - -3 - -1 - 400 - 183 - + + + + + 16777215 + 25 + + + + + 12 + 75 + true + + + + Mr. Hash - - true + + Qt::AlignCenter - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + 450 + 16777215 + + + + 0 + + + + General + + + + 0 + + + 0 + + + 0 + + + 0 + + + 5 + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> <tr> <td style="border: none;"> -<p align="center" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:8pt;">Copyright © 2010 Debugger20</span></p> -<p align="center" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://mrhash.googlecode.com/"><span style=" font-size:8pt; text-decoration: underline; color:#0000ff;">http://mrhash.googlecode.com/</span></a></p> -<p align="center" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:8pt;">The icon used by this program is a part of the icon set &quot;Secure Icons&quot; by Simio Graphics (</span><a href="http://simiographics.deviantart.com/"><span style=" font-size:8pt; text-decoration: underline; color:#0000ff;">http://simiographics.deviantart.com/</span></a><span style=" font-family:'Courier New,courier'; font-size:8pt;">)</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:8pt;">Copyright © 2010 - 2015 rikyoz</span><br /><a href="https://github.com/rikyoz/mrhash"><span style=" font-size:8pt; text-decoration: underline; color:#0000ff;">https://github.com/rikyoz/mrhash</span></a></p> +<p align="center" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:8pt;">The icon used by this program is a part of the icon set &quot;Secure Icons&quot; by Simio Graphics</span><span style=" font-size:8pt;"><br /></span><span style=" font-family:'Courier New,courier'; font-size:8pt;">(</span><a href="http://simiographics.deviantart.com/"><span style=" font-size:8pt; text-decoration: underline; color:#0000ff;">http://simiographics.deviantart.com/</span></a><span style=" font-family:'Courier New,courier'; font-size:8pt;">)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; font-size:8pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'monospace'; font-size:8pt; color:#35382a;">This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'monospace'; font-size:8pt; color:#35382a;">This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'monospace'; font-size:8pt; color:#35382a;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'monospace'; font-size:8pt; color:#35382a;">You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span></p></td></tr></table></body></html> - - - - - - Haval - - - - - 0 - -1 - 400 - 183 - - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + Third-party + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> -<tr> -<td style="border: none;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2002, 2003, 2004 by Michael Buesch</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">email: mbuesch@freenet.de</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Public domain implementation by Paulo S.L.M. Barreto &lt;pbarreto@nw.com.br&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.</span></p></td></tr></table></body></html> - +<p style=" margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Haval</span><span style=" font-size:8pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2002, 2003, 2004 by Michael Buesch<br />email: mbuesch@freenet.de<br /><br />Public domain implementation by Paulo S.L.M. Barreto &lt;pbarreto@nw.com.br&gt;<br />This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. </span></p> +<p style=" margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">RIPEMD</span><span style=" font-size:8pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2004 by Michael Buesch<br />email: mbuesch@freenet.de<br /><br />This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. </span></p> +<p style=" margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Tiger</span><span style=" font-size:8pt;"> </span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2002, 2003, 2004 by Michael Buesch<br />email: mbuesch@freenet.de<br /><br />tiger.c - The TIGER hash function<br />Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.<br /><br />This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. </span></p></body></html> + + + + + - - - - Ripe-MD - - - - - -2 - -1 - 400 - 183 - + + + + + + 0 + 0 + - - true + + + 16777215 + 25 + - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> -<tr> -<td style="border: none;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2004 by Michael Buesch</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">email: mbuesch@freenet.de</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.</span></p></td></tr></table></body></html> + + vX.Y + + + Qt::AlignCenter - - - - Tiger - - - - - 0 - -1 - 400 - 183 - + + + + + - - true + + :/res/icon.png - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> -<tr> -<td style="border: none;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 2002, 2003, 2004 by Michael Buesch</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">email: mbuesch@freenet.de</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">tiger.c - The TIGER hash function</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.</span></p></td></tr></table></body></html> + + Qt::AlignCenter - - + + diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 9b972df..9bdb88b 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 894 - 493 + 511 @@ -390,6 +390,9 @@ Exit + + Ctrl+Q +