Russian Qt Forum
Июнь 16, 2024, 16:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 11 12 [13] 14 15 ... 18   Вниз
  Печать  
Автор Тема: Регулярное выражение с QString  (Прочитано 154730 раз)
Spark
Гость
« Ответ #180 : Август 01, 2013, 18:26 »

Igors Спасибо! Протестировал ваш код. Очень хорошо. На порядок быстрее чем то, что смог я сделать. Но на порядок (почти в 30раз) медленнее остальных вариантов (сортировка в порядке частотности и по алфавиту).
Что-то Вы не так меряли - возможно все съедается на построении itemList, этот код я не видел. Кстати тут было замечание насчет reserve, оно справедливо и для QHash
Код
C++ (Qt)
QHash<QString, int> freqHash;
freqHash.reserve(itemList.size());  // так должно быть быстрее (правда хз насколько)
foreach (QString s, itemList) ++freqHash[s];
 
Спасибо учту и протестирую на сколько быстрее.
Но это какой то спортивный азарт Улыбающийся. Вовсе не думал, что в таких объемах кто то будет сортировать текст. Но все возможно. Дальше будет интереснее Улыбающийся. Пока это только стандартный функционал, но довольно полный. Встречал только одну программку с таким функционалом. Остальные урезаны.
Записан
Spark
Гость
« Ответ #181 : Август 01, 2013, 18:31 »

Есть пара багов.
- Что то напутал с подсчетом общего количества слов.
- Если куда скопировать текст, а затем попробовать подсчитать русский в моей программе, то либо крякозябры, либо пусто.
Записан
Spark
Гость
« Ответ #182 : Август 01, 2013, 18:49 »

Как бы резервирование особо ничего не дало:
Код
C++ (Qt)
   // ВАРИАНТ БЕЗ СОРТИРОВКИ (frequencyList)
   if(cfg.preferences.typeOfSort == 2)
   {
       QHash<QString, int> frequencyHash;
       frequencyHash.reserve(itemList.size());
       foreach (QString s, itemList) ++frequencyHash[s];
       foreach (QString s, itemList)
       {
           int & num = frequencyHash[s];
           countItemString.setNum(num);
           if (num < 0) continue;
           countItemFull = countItemFull + num;
           if(s.size() < minSizeWord || s.size() > maxSizeWord || frequencyHash[s] < minRepeats )continue;
           frequencyList.prepend(s + '\t' + countItemString);
           num = -num;
       }
   }

Результаты при подсчете всех слов:
Reade Data:  8933
Data toLower:  311
Data split:  9620
Count:  15837
Data sort:  0
Clear zero:  12
Write name:  0

Английских:
Reade Data:  8971
Data toLower:  310
Data split:  15264
Count:  13536
Data sort:  0
Clear zero:  4
Write name:  0
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #183 : Август 01, 2013, 19:49 »

Код
C++ (Qt)
 
if(s.size() < minSizeWord || s.size() > maxSizeWord || frequencyHash[s] < minRepeats )continue;
 
Избегайте таких слишком длинных строк. И пробелы ставьте однообразно (напр после if).
Код
C++ (Qt)
 
frequencyList.reserve(itemList.size()); // ну "типа грамотно"
foreach (QString s, itemList)  {
 if (s.size() < minSizeWord || s.size() > maxSizeWord) continue;   // сначала проверились по длине
 int & num = frequencyHash[s];
 if (num < 0) continue;
 if (num >= minRepeats ) {
  countItemFull += num;
  frequencyList.prepend(s + '\t' + QString::number(long(num));
 }
 num = -num;
}
 
Пользуйnесь QString::number, не плодите ненужных переменных.
Записан
Spark
Гость
« Ответ #184 : Август 02, 2013, 02:45 »

Код:
[quote author=Igors link=topic=25332.msg181725#msg181725 date=1375375776]
Избегайте таких слишком длинных строк. И пробелы ставьте однообразно (напр после if).

Пользуйnесь QString::number, не плодите ненужных переменных.
[/quote]
Спасибо за поправки. По поводу QString::number, пробовал использовать как в вашем коде, компилятор ругается. Особо не вникал в причины, поставил как работает. Сейчас попробую разобраться.
Записан
Spark
Гость
« Ответ #185 : Август 02, 2013, 03:40 »

Спасибо! Поправил:
Код
C++ (Qt)
   // ВАРИАНТ БЕЗ СОРТИРОВКИ (frequencyList)
   if(cfg.preferences.typeOfSort == 2)
   {
       QHash<QString, int> frequencyHash;
       frequencyList.reserve(itemList.size());
       foreach (QString s, itemList) {
           if(s.size() < minSizeWord || s.size() > maxSizeWord )continue;
           int & num = frequencyHash[s];
           if (num < 0) continue;
           if(num >= minRepeats ) {
               countItemFull += num;
               frequencyList.prepend(s + '\t' + QString::number(long(num)));
           }
           num = -num;
       }
   }

Результаты при подсчете всех слов:
Reade Data:  8807
Data toLower:  307
Data split:  9405
Count:  4111
Data sort:  0
Clear zero:  11
Write name:  0

Английских:
Reade Data:  8763
Data toLower:  306
Data split:  15077
Count:  1334
Data sort:  0
Clear zero:  4
Write name:  0

Фактически уравнены расчеты с остальными вариантами.

========================
Для сравнения старые данные http://www.prog.org.ru/index.php?topic=25332.msg181717#msg181717:
Результаты при подсчете всех слов:
Reade Data:  8933
Data toLower:  311
Data split:  9620
Count:  15837
Data sort:  0
Clear zero:  12
Write name:  0

Английских:
Reade Data:  8971
Data toLower:  310
Data split:  15264
Count:  13536
Data sort:  0
Clear zero:  4
Write name:  0

Но показалось, что при этом считает не верно. Ладно прибегу с работы перепроверю условия.
« Последнее редактирование: Август 02, 2013, 03:43 от Spark » Записан
Spark
Гость
« Ответ #186 : Август 02, 2013, 16:40 »

Зачем Вы подсчитываете countItemFull если он известен и равен itemList.size() до removeDuplicates. Записать можно значительно короче
Ухудшила результат на 5 секунд.
На сколько понял это лишняя пробежка по списку.
« Последнее редактирование: Август 02, 2013, 17:14 от Spark » Записан
Spark
Гость
« Ответ #187 : Август 02, 2013, 17:09 »

Можно ли табуляцию увеличить на определенное число символов?
Записан
Spark
Гость
« Ответ #188 : Август 02, 2013, 17:54 »

На это момент код выглядит так:
Код
C++ (Qt)
void MainWindow::bufferButtonSave()
{
   QTime tm;
   tm.start();
 
   QClipboard *clipboard = QApplication::clipboard();
   QString originalText = clipboard->text();
   QString countItemFullString;
   QString countItemStringZero;
   QStringList itemList;
   QStringList frequencyList;
   int countItemFull(0);
   int minSizeWord(cfg.preferences.minSizeWord);
   int maxSizeWord(cfg.preferences.maxSizeWord);
   int minRepeats(cfg.preferences.minRepeats);
 
   qDebug() << "Reade Data: " << tm.elapsed();
 
   tm.start();
   originalText = originalText.toLower();
 
   qDebug() << "Data toLower: " << tm.elapsed();
   tm.start();
 
   textory.clear();
 
   // ОСТАВЛЯЕМ ТЕКСТ
   if(cfg.preferences.langStatSort == 0)itemList = originalText.split(QRegExp("[\\s\\W\\d]+"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ АНГЛИЙКИЙ
   if(cfg.preferences.langStatSort == 1)itemList = originalText.split(QRegExp("[^a-z]"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ РУССКИЙ
   if(cfg.preferences.langStatSort == 2)itemList = originalText.split(QRegExp(QString::fromUtf8("[^а-яё]")),QString::SkipEmptyParts);
 
   countItemFull = itemList.size();
 
   qDebug() << "Data split: " << tm.elapsed();
   tm.start();
 
   // ВАРИАНТ БЕЗ СОРТИРОВКИ (frequencyList)
   if(cfg.preferences.typeOfSort == 2)
   {
       QHash<QString, int> frequencyHash;
       foreach (QString s, itemList) ++frequencyHash[s];
       frequencyList.reserve(countItemFull);
       foreach (QString s, itemList) {
           if(s.size() < minSizeWord || s.size() > maxSizeWord )continue;
           int & num = frequencyHash[s];
           if (num < 0) continue;
           if(num >= minRepeats ) {
               frequencyList.prepend(s + '\t' + QString::number(long(num)));
           }
           num = -num;
       }
   }
 
   // СОРТИРОВКА В ПОРЯДКЕ ЧАСТОТНОСТИ И АЛФАВИТУ
   if(cfg.preferences.typeOfSort == 0 || cfg.preferences.typeOfSort == 1)
   {
       QHash<QString, int> frequencyHash;
       foreach (QString Item, itemList) ++frequencyHash[Item];
       frequencyList.reserve(countItemFull);
       QHashIterator<QString,int> Iter(frequencyHash);
       while(Iter.hasNext())
       {
           Iter.next();
           if(Iter.key().size() < minSizeWord || Iter.key().size() > maxSizeWord || Iter.value() < minRepeats )continue;
           countItemStringZero = QString::number(long(Iter.value())).rightJustified(6, '0');
           if(cfg.preferences.typeOfSort == 0)frequencyList.append(countItemStringZero + Iter.key() + "\t" + QString::number(long(Iter.value())) );
           if(cfg.preferences.typeOfSort == 1 || cfg.preferences.typeOfSort == 2)frequencyList.append(Iter.key() + "\t" + QString::number(long(Iter.value())) );
       }
   }
 
   qDebug() << "Count: " << tm.elapsed();
   tm.start();
 
   // СТРОИМ СПИСОК
   if(cfg.preferences.typeOfSort != 2)qSort(frequencyList);
 
   textory.enableAdd( true );
 
   qDebug() << "Data sort: " << tm.elapsed();
   tm.start();
 
   if(cfg.preferences.typeOfSort == 0 || cfg.preferences.typeOfSort == 2)
   {
       foreach (QString itm, frequencyList)
       {
           if(cfg.preferences.typeOfSort == 0)itm.remove(0,6);
           textory.addItem( Textory::Item( 1, itm ) );
       }
   }
 
   if(cfg.preferences.typeOfSort == 1)
   {
       QListIterator<QString>itm(frequencyList);
       itm.toBack();
       while (itm.hasPrevious())
           textory.addItem( Textory::Item( 1, itm.previous() ) );
   }
 
   qDebug() << "Clear zero: " << tm.elapsed();
   tm.start();
 
   countItemFullString.setNum(countItemFull);
 
   ui.textoryPaneWidget->getTextoryLabel().setText( "Frequency list (" + countItemFullString + ")" );
 
   qDebug() << "Write name: " << tm.elapsed();
}
Ждем очередную порцию взбучки Улыбающийся.
Записан
Spark
Гость
« Ответ #189 : Август 02, 2013, 18:40 »

Как мог оптимизировал:
Код
C++ (Qt)
void MainWindow::bufferButtonSave()
{
   QTime tm;
   tm.start();
 
   QClipboard *clipboard = QApplication::clipboard();
   QString originalText = clipboard->text();
   QString countItemFullString;
   QString countItemStringZero;
   QStringList itemList;
   QStringList frequencyList;
   int countItemFull(0);
   int minSizeWord(cfg.preferences.minSizeWord);
   int maxSizeWord(cfg.preferences.maxSizeWord);
   int minRepeats(cfg.preferences.minRepeats);
 
   qDebug() << "Reade Data: " << tm.elapsed();
 
   tm.start();
   originalText = originalText.toLower();
 
   qDebug() << "Data toLower: " << tm.elapsed();
   tm.start();
 
   textory.clear();
 
   // ОСТАВЛЯЕМ ТЕКСТ
   if(cfg.preferences.langStatSort == 0)itemList = originalText.split(QRegExp("[\\s\\W\\d]+"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ АНГЛИЙКИЙ
   if(cfg.preferences.langStatSort == 1)itemList = originalText.split(QRegExp("[^a-z]"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ РУССКИЙ
   if(cfg.preferences.langStatSort == 2)itemList = originalText.split(QRegExp(QString::fromUtf8("[^а-яё]")),QString::SkipEmptyParts);
 
   countItemFull = itemList.size();
 
   qDebug() << "Data split: " << tm.elapsed();
   tm.start();
 
   // СОРТИРОВКА (frequencyList)
       QHash<QString, int> frequencyHash;
       foreach (QString s, itemList) ++frequencyHash[s];
       frequencyList.reserve(countItemFull);
       foreach (QString s, itemList) {
           if(s.size() < minSizeWord || s.size() > maxSizeWord )continue;
           int & num = frequencyHash[s];
           if (num < 0) continue;
           if(num >= minRepeats ) {
               if(cfg.preferences.typeOfSort == 2)frequencyList.prepend(s + '\t' + QString::number(long(num)));
               if(cfg.preferences.typeOfSort == 1)frequencyList.prepend(s + '\t' + QString::number(long(num)));
               if(cfg.preferences.typeOfSort == 0)
               {
                   countItemStringZero = QString::number(long(num)).rightJustified(6, '0');
                   frequencyList.prepend(countItemStringZero + s + '\t' + QString::number(long(num)));
               }
           }
           num = -num;
       }
 
   qDebug() << "Count: " << tm.elapsed();
   tm.start();
 
   // СТРОИМ СПИСОК
   if(cfg.preferences.typeOfSort != 2)qSort(frequencyList);
 
   textory.enableAdd( true );
 
   qDebug() << "Data sort: " << tm.elapsed();
   tm.start();
 
   if(cfg.preferences.typeOfSort == 0 || cfg.preferences.typeOfSort == 2)
   {
       foreach (QString itm, frequencyList)
       {
           if(cfg.preferences.typeOfSort == 0)itm.remove(0,6);
           textory.addItem( Textory::Item( 1, itm ) );
       }
   }
 
   if(cfg.preferences.typeOfSort == 1)
   {
       QListIterator<QString>itm(frequencyList);
       itm.toBack();
       while (itm.hasPrevious())
           textory.addItem( Textory::Item( 1, itm.previous() ) );
   }
 
   qDebug() << "Clear zero: " << tm.elapsed();
   tm.start();
 
   countItemFullString.setNum(countItemFull);
 
   ui.textoryPaneWidget->getTextoryLabel().setText( "Frequency list (" + countItemFullString + ")" );
 
   qDebug() << "Write name: " << tm.elapsed();
}
Записан
Spark
Гость
« Ответ #190 : Август 02, 2013, 18:46 »

Результаты после оптимизации:
По частотности:
Reade Data:  8858
Data toLower:  310
Data split:  9582
Count:  3684
Data sort:  352
Clear zero:  332
Write name:  0

По алфавиту:
Reade Data:  8807
Data toLower:  308
Data split:  9539
Count:  2886
Data sort:  280
Clear zero:  0
Write name:  0

Без сортировки:
Reade Data:  8737
Data toLower:  311
Data split:  9491
Count:  2878
Data sort:  0
Clear zero:  11
Write name:  0

Процентов на 25 возросла скорость построения списка.

Можно, что либо еще предпринять?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #191 : Август 02, 2013, 19:36 »

Можно ли табуляцию увеличить на определенное число символов?
что это значит?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Spark
Гость
« Ответ #192 : Август 02, 2013, 19:48 »

Можно ли табуляцию увеличить на определенное число символов?
что это значит?
В окне вывод у меня колонка слов и частоты через табулятор:
(s + '\t' + QString::number(long(num)))
Получается типа ровной таблицы в две колонки.
Но если слово длинное то табличка в этом месте рушится. Надо увеличить число символов для табуляции.
В принципе можно поставить две табуляции, но длинновато получится.

Возможно в конечном варианте будет настоящая табличка, но пока так.
« Последнее редактирование: Август 02, 2013, 19:50 от Spark » Записан
Spark
Гость
« Ответ #193 : Август 04, 2013, 04:17 »

Пока форум барахлил, произвел некоторую оптимизацию кода, убрал лишние промежуточные переменные и добавил фишку - Wildcard и несколькь доработал окно настроек.
Выкладываю листинги. Покритикуйте все, что можно покритиковать.
Слоты в mainwindow.cc:
Код
C++ (Qt)
void MainWindow::wordStat()
{
   QTime tm;
   tm.start();
 
   QClipboard *clipboard = QApplication::clipboard();
   QString originalText = clipboard->text();
   QString addZero;
   QStringList listFull;
   QStringList frequencyList;
 
   qDebug() << "Reade Data: " << tm.elapsed();
   tm.start();
 
   textory.clear();
   textory.enableAdd( true );
 
   // ОСТАВЛЯЕМ ТЕКСТ
   if(cfg.preferences.langStatSort == 0)listFull = originalText.toLower().split(QRegExp("[\\s\\W\\d_]+"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ АНГЛИЙКИЙ
   if(cfg.preferences.langStatSort == 1)listFull = originalText.toLower().split(QRegExp("[^a-z]+"),QString::SkipEmptyParts);
 
   // ОСТАВЛЯЕМ РУССКИЙ
   if(cfg.preferences.langStatSort == 2)listFull = originalText.toLower().split(QRegExp(QString::fromUtf8("[^а-яё]+")),QString::SkipEmptyParts);
 
   qDebug() << "Data split: " << tm.elapsed();
   tm.start();
 
   // ПОСТРОЕНИЕ СПИСКА
 
   QRegExp rx(muRegExp);
   rx.setPatternSyntax(QRegExp::Wildcard);
 
   QHash<QString, int> frequencyHash;
   foreach (QString s, listFull) ++frequencyHash[s];
   frequencyList.reserve(listFull.size());
   foreach (QString s, listFull) {
       if(s.size() < cfg.preferences.minSizeWord || s.size() > cfg.preferences.maxSizeWord )continue;
       if(!muRegExp.isEmpty() && !rx.exactMatch(s))continue;
       int & num = frequencyHash[s];
       if(num < 0) continue;
       if(num >= cfg.preferences.minRepeats ) {
           if(cfg.preferences.typeOfSort == 2)frequencyList.prepend(s + '\t' + QString::number(long(num)));
           if(cfg.preferences.typeOfSort == 1)frequencyList.prepend(s + '\t' + QString::number(long(num)));
           if(cfg.preferences.typeOfSort == 0)
           {
               addZero = QString::number(long(num)).rightJustified(6, '0');
               frequencyList.prepend(addZero + s + '\t' + QString::number(long(num)));
           }
       }
       num = -num;
   }
 
   qDebug() << "Count: " << tm.elapsed();
   tm.start();
 
   if(cfg.preferences.typeOfSort != 2)qSort(frequencyList);
 
   // ВЫВОД СПИСКА
   qDebug() << "Data sort: " << tm.elapsed();
   tm.start();
 
   if(cfg.preferences.typeOfSort == 0 || cfg.preferences.typeOfSort == 2)
   {
       foreach (QString itm, frequencyList)
       {
           if(cfg.preferences.typeOfSort == 0)itm.remove(0,6);
           textory.addItem( Textory::Item( 1, itm ) );
       }
   }
 
   if(cfg.preferences.typeOfSort == 1)
   {
       QListIterator<QString>itm(frequencyList);
       itm.toBack();
       while (itm.hasPrevious())
           textory.addItem( Textory::Item( 1, itm.previous() ) );
   }
 
   qDebug() << "Out list: " << tm.elapsed();
   tm.start();
 
   ui.textoryPaneWidget->getTextoryLabel().setText( "Frequency list (" + QString::number(long(listFull.size())) + ")" );
 
   qDebug() << "Write name: " << tm.elapsed();
}
 
void MainWindow::wordStatWidget()
{
   WordStatDialog *dialog = new WordStatDialog( cfg );
   dialog->setWindowFlags(Qt::WindowStaysOnTopHint);
   connect(dialog->addFromClipboardButton, SIGNAL(clicked()), this, SLOT(wordStat()));
   connect(dialog->setWildcardLineEdit, SIGNAL(textChanged(QString)), this, SLOT(regExpChange(QString)));
   dialog->show();
}
 
void MainWindow::regExpChange(QString regExp)
{
  muRegExp = regExp;
}

Обратите внимание как произвел передачу регеспа. Честно говоря, провозился довольно долго, что бы понять как это делается (до этого обходился передачей через конфиг). Ну что поделать, не знание... не освобождает от...
Так вот достаточно ли корректно я это сделал или можно было как то попроще это сделать?

Однако, добавление плюсика в регесп
split(QRegExp("[^a-z]+")
дало 50-процентный выигрыш по времени на этой операции. И на этапе разделения, сэкономило секунд 7. Не плохо.
И теперь результаты при разделении английского, примерно таковы:
Reade Data:  8821
Data split:  7804
Count:  1228
Data sort:  0
Out list:  3
Write name:  0

По сравнению со старыми:
Английских:
Reade Data:  8906
Data toLower:  307
Data split:  15160
Count:  1523
Data sort:  92
Clear zero:  4
Write name:  0

Может еще будут предложения по достижения наивысшей скорости в рамках QT?
« Последнее редактирование: Август 04, 2013, 04:33 от Spark » Записан
Spark
Гость
« Ответ #194 : Август 04, 2013, 04:31 »

Собственно, обновленное окно настроек:

wordstat.hh
Код
C++ (Qt)
#ifndef WORDSTAT_HH
#define WORDSTAT_HH
 
#include <QDialog>
 
#include "config.hh"
#include "mainwindow.hh"
 
class QLabel;
class QSpinBox;
class QComboBox;
class QPushButton;
 
class WordStatDialog : public QDialog
{
   Q_OBJECT
 
public:
   WordStatDialog( Config::Class &cfg_, QWidget * parent = 0 );
 
   QPushButton *addFromClipboardButton;
 
   QLineEdit *setWildcardLineEdit;
 
private slots:
   void addFromClipboardButtonClicked();
   void setMinValue(int);
   void setMinSizeWordButtonClicked();
   void setMaxSizeWordButtonClicked();
 
private:
   Config::Class &cfg;
 
   QLabel *setMinSizeWordLabel;
   QLabel *setMaxSizeWordLabel;
   QLabel *setSizeLabel;
   QLabel *setMinRepeatsLabel;
   QLabel *setLanguageLabel;
   QLabel *setTypeOfSortLabel;
   QLabel *setWildcardLabel;
 
   QSpinBox *setMinSizeWordSpinBox;
   QSpinBox *setMaxSizeWordSpinBox;
   QSpinBox *setMinRepeatsSpinBox;
 
   QPushButton *setMinSizeWordButton;
   QPushButton *setMaxSizeWordButton;
 
   QComboBox *setLanguageComboBox;
   QComboBox *setTypeOfSortComboBox;
 
};
 
#endif // WORDSTAT_HH

wordstat.cc
Код
C++ (Qt)
#include <QtGui>
 
#include "wordstat.hh"
 
WordStatDialog::WordStatDialog( Config::Class &cfg_, QWidget *parent ) :
   QDialog( parent ),
   cfg(cfg_)
 
{
   setWindowTitle(tr("WordStat"));
   setMinimumWidth(210);
 
   setMinSizeWordLabel = new QLabel(tr("Min Of Letters:"));
   setMinSizeWordSpinBox = new QSpinBox();
   setMinSizeWordSpinBox->setValue(cfg.preferences.minSizeWord);
   setMinSizeWordSpinBox->setMinimum(1);
   setMinSizeWordSpinBox->setMaximum(99);
 
   setMaxSizeWordLabel = new QLabel(tr("Max Of Letters:"));
   setMaxSizeWordSpinBox = new QSpinBox();
   setMaxSizeWordSpinBox->setValue(cfg.preferences.maxSizeWord);
   setMaxSizeWordSpinBox->setMinimum(setMinSizeWordSpinBox->value());
   setMaxSizeWordSpinBox->setMaximum(99);
 
   connect(setMinSizeWordSpinBox, SIGNAL(valueChanged(int)),
           this, SLOT(setMinValue(int)));
 
   setMinRepeatsLabel = new QLabel(tr("Min Repeats:"));
   setMinRepeatsSpinBox = new QSpinBox();
   setMinRepeatsSpinBox->setValue(cfg.preferences.minRepeats);
   setMinRepeatsSpinBox->setMinimum(1);
   setMinRepeatsSpinBox->setMaximum(999);
 
   setLanguageLabel = new QLabel(tr("Language:"));
   setLanguageComboBox = new QComboBox();
   setLanguageComboBox->addItem("All Text");
   setLanguageComboBox->addItem("English");
   setLanguageComboBox->addItem("Russian");
   setLanguageComboBox->setCurrentIndex(cfg.preferences.langStatSort);
 
   setTypeOfSortLabel = new QLabel(tr("Type Of Sort:"));
   setTypeOfSortComboBox = new QComboBox();
   setTypeOfSortComboBox->addItem("Amount");
   setTypeOfSortComboBox->addItem("Alphabet");
   setTypeOfSortComboBox->addItem("No Sort");
   setTypeOfSortComboBox->setCurrentIndex(cfg.preferences.typeOfSort);
 
   setWildcardLabel = new QLabel(tr("Wildcard:"));
   setWildcardLineEdit = new QLineEdit();
   setWildcardLabel->setBuddy(setWildcardLineEdit);
 
   setSizeLabel = new QLabel(tr("Set Size Word:"));
   setMinSizeWordButton = new QPushButton(tr("Min Size"));
   setMaxSizeWordButton = new QPushButton(tr("Max Size"));
 
   addFromClipboardButton = new QPushButton(tr("Clipboard"));
 
   QGridLayout *wordStatLayout = new QGridLayout;
   wordStatLayout->addWidget(setMinSizeWordLabel, 0, 0);
   wordStatLayout->addWidget(setMinSizeWordSpinBox, 0, 1, 1, 2);
   wordStatLayout->addWidget(setMaxSizeWordLabel, 1, 0);
   wordStatLayout->addWidget(setMaxSizeWordSpinBox, 1, 1, 1, 2);
 
   wordStatLayout->addWidget(setSizeLabel, 2, 0);
   wordStatLayout->addWidget(setMinSizeWordButton, 2, 1);
   wordStatLayout->addWidget(setMaxSizeWordButton, 2, 2);
 
   wordStatLayout->addWidget(setMinRepeatsLabel, 3, 0);
   wordStatLayout->addWidget(setMinRepeatsSpinBox, 3, 1, 1, 2);
   wordStatLayout->addWidget(setLanguageLabel, 4, 0);
   wordStatLayout->addWidget(setLanguageComboBox, 4, 1, 1, 2);
   wordStatLayout->addWidget(setTypeOfSortLabel, 5, 0, 1, 2);
   wordStatLayout->addWidget(setTypeOfSortComboBox, 5, 1, 1, 2);
 
   wordStatLayout->addWidget(setWildcardLabel, 6, 0);
   wordStatLayout->addWidget(setWildcardLineEdit, 6, 1, 1, 2);
 
   wordStatLayout->addWidget(addFromClipboardButton, 7, 0, 1, 3);
 
   QVBoxLayout *mainWordStatLayout = new QVBoxLayout;
   mainWordStatLayout->addLayout(wordStatLayout);
   setLayout(mainWordStatLayout);
 
   connect(addFromClipboardButton, SIGNAL(clicked()),
           this, SLOT(addFromClipboardButtonClicked()));
 
   connect(setMinSizeWordButton, SIGNAL(clicked()),
           this, SLOT(setMinSizeWordButtonClicked()));
   connect(setMaxSizeWordButton, SIGNAL(clicked()),
           this, SLOT(setMaxSizeWordButtonClicked()));
}
 
void WordStatDialog::setMinValue(int)
{
   if(setMinSizeWordSpinBox->value() > setMaxSizeWordSpinBox->value())
       setMaxSizeWordSpinBox->setValue(setMinSizeWordSpinBox->value());
   setMaxSizeWordSpinBox->setMinimum(setMinSizeWordSpinBox->value());
}
 
void WordStatDialog::setMinSizeWordButtonClicked()
{
   setMaxSizeWordSpinBox->setValue(setMinSizeWordSpinBox->value());
}
 
void WordStatDialog::setMaxSizeWordButtonClicked()
{
   setMaxSizeWordSpinBox->setValue(99);
}
 
void WordStatDialog::addFromClipboardButtonClicked()
{
   if(setWildcardLineEdit->text().startsWith(" "))setWildcardLineEdit->clear();
   cfg.preferences.minSizeWord = setMinSizeWordSpinBox->value();
   cfg.preferences.maxSizeWord = setMaxSizeWordSpinBox->value();
   cfg.preferences.minRepeats = setMinRepeatsSpinBox->value();
   cfg.preferences.langStatSort = setLanguageComboBox->currentIndex();
   cfg.preferences.typeOfSort = setTypeOfSortComboBox->currentIndex();
}
« Последнее редактирование: Август 04, 2013, 04:33 от Spark » Записан
Страниц: 1 ... 11 12 [13] 14 15 ... 18   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.379 секунд. Запросов: 23.