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

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

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Диалоговое окно для ввода текста  (Прочитано 36296 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #60 : Июль 10, 2013, 12:33 »

Цитировать
А вытащить список директорий иным способом нельзя? Нет волшебной функции?
ты и так используешь волшебную метод entryInfoList(), но можно пойти еще дальше и задать фильтр названий прямо в методе первым параметром, а параметры, чьи значения совпадают со значениями по умолчанию, можно и не передавать (QDir::NoSort)
Код
C++ (Qt)
dirComboBox3 = new QComboBox();
я заметил, что ты все виджеты создаешь без родителя (параметр конструктора). это не очень хороший подход. и название переменной тоже оставляет желать лучшего.
В конце создания нового проекта перерисовываю комбобокс. Случайные пункты с именами файлов убрал регэкспом:
копипаста — это плохо. к тому же, если ты просто хочешь, чтобы новые элементы добавлялись в комбобокс в алфавитном порядке, задай dirComboBox3->setInsertPolicy(QComboBox::InsertAlphabetically) и добавляй новый проект просто в виде dirComboBox3->addItem(newProjectPath);
Код
C++ (Qt)
fPath.remove(QRegExp("/*.*_"));
что это за магия вообще? как регулярное выражение оно написано ужасно и непонятно.
Записан

Изучением 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
Гость
« Ответ #61 : Июль 10, 2013, 12:55 »

Код
C++ (Qt)
fPath.remove(QRegExp("/*.*_"));
что это за магия вообще? как регулярное выражение оно написано ужасно и непонятно.
Много опыта не имел с регулярными выражениями.
C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Как бы вы поступили если необходимо оставить abbr1_abbr2_projFolder?

На счет имен. Это временно. Пока не выработал в сознании стройной системы. Как только руки дойдут, так только пройдусь и переименую должным образом.

Остальное сейчас буду осознавать Улыбающийся и пытаться оптимизировать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #62 : Июль 10, 2013, 13:12 »

C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Как бы вы поступили если необходимо оставить abbr1_abbr2_projFolder?
Код
C++ (Qt)
int pos = str.lastIndexOf('/');
if (pos >= 0)
str = str.right(str.size() - pos - 1);
 
Записан
Spark
Гость
« Ответ #63 : Июль 10, 2013, 13:19 »

C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Как бы вы поступили если необходимо оставить abbr1_abbr2_projFolder?
Код
C++ (Qt)
int pos = str.lastIndexOf('/');
if (pos >= 0)
str = str.right(str.size() - pos - 1);
 
Однако, этот способ не выглядит лаконичным и более красивым. Но может у него есть преимущества?
Записан
Spark
Гость
« Ответ #64 : Июль 10, 2013, 13:28 »

Прошу прощения. С пути - C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Оставить необходимо projFolder.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #65 : Июль 10, 2013, 13:56 »

Однако, этот способ не выглядит лаконичным и более красивым. Но может у него есть преимущества?
Мне кажется не очень грамотным запрягать QRegExp если есть гораздо более простой способ. А вот сделать лаконичнее - мысль хорошая. Я бы добавил такой хедерок (напр MyStr.h)
Код
C++ (Qt)
#ifndef MYSTR_H
#define MYSTR_H
 
#include <QString>
#include <QDir>
 
namespace MyStr {
 
inline QString AfterLast( const QString & src, QChar ch )
{
 return str.mid(str.lastIndexOf(ch) + 1);
}
 
inline QString Path2FileName( const QString & path )
{
 return AfterLast(path, QDir::seperator());
}
 
} // namespace
 
#endif    // MYSTR_H
 
И по мере необходимости дописывл туда нужные ф-ции. А их будет много - даже при работе с именами файлов
« Последнее редактирование: Июль 10, 2013, 16:08 от Igors » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #66 : Июль 10, 2013, 13:58 »

Прошу прощения. С пути - C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Оставить необходимо projFolder.
Вот и хорошо, проаерим подход который я только что рекомендовал
Код
C++ (Qt)
using namespace MyStr;
...
str = AfterLast(Path2FileName(str), '_');
 
« Последнее редактирование: Июль 10, 2013, 15:57 от Igors » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #67 : Июль 10, 2013, 14:19 »

Как бы вы поступили если необходимо оставить abbr1_abbr2_projFolder?
в общем случае я бы использовал QFileInfo. вот ты вроде ж использовал QDir, а описание класса внимательно не читал?

2Igors: короче будет str.mid(pos) или вовсе str.mid(str.lastIndexOf(ch)) Подмигивающий да и с QDir::seperator() сядем в лужу если под виндой пути хранятся через прямой слэш как в данном случае.

проще всего тут, на мой взгляд, будет
Код
C++ (Qt)
fPath = MyStr::AfterLast(fPath, '_')
ну или прямо в коде написать
Код
C++ (Qt)
fPath = fPath.mid(fPath.lastIndexOf('_'));
Записан

Изучением 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
Гость
« Ответ #68 : Июль 10, 2013, 14:31 »

Сейчас начнет голова кругом от информации Улыбающийся. Но по порядку.
копипаста — это плохо. к тому же, если ты просто хочешь, чтобы новые элементы добавлялись в комбобокс в алфавитном порядке, задай dirComboBox3->setInsertPolicy(QComboBox::InsertAlphabetically) и добавляй новый проект просто в виде dirComboBox3->addItem(newProjectPath);

Так действительно компактнее и проще.
Код
C++ (Qt)
#include <QtGui>
 
#include "mfldialog.hh"
 
MainDialog::MainDialog( Config::Class &cfg_, QWidget *parent ) :
   QDialog( parent ),
   cfg(cfg_)
{
...
...
   dirComboBox3 = new QComboBox();
   dirComboBox3->setInsertPolicy(QComboBox::InsertAlphabetically);
   QDir dir( cfg.projectTextionaryFolder );
   QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort);
   for (int i = 0; i < list.size(); ++i)
   {
      QFileInfo fInfo = list.at(i);
      QString fPath = fInfo.filePath();
      fPath.remove(QRegExp("/*.*_"));
      dirComboBox3->addItem(fPath);
   }
...
...
void FindDialog::findClicked()
{
   QString text = lineTextName->text();
   QString text2 = lineTextVersion->text();
   QString text3 = txtComboBox1->currentText();
   QString text4 = txtComboBox2->currentText();
   QString text5 = atxEdit->toPlainText();
 
   dirComboBox3->addItem(text);
...

Но вот в алфавитном порядке не выстраивается. Что не так делаю?
Записан
Spark
Гость
« Ответ #69 : Июль 10, 2013, 15:31 »

В алфавитном порядке не получается выстроить.

Код
C++ (Qt)
fPath = fPath.mid(fPath.lastIndexOf('_'));
Оставляет подчеркивание.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #70 : Июль 10, 2013, 16:06 »

2Igors: короче будет str.mid(pos) или вовсе str.mid(str.lastIndexOf(ch)) Подмигивающий да и с QDir::seperator() сядем в лужу если под виндой пути хранятся через прямой слэш как в данном случае.
Ну то надо по месту решать какие слеши. Да, mid короче, но 1 надо прибавить
Код
C++ (Qt)
mid(fPath.lastIndexOf('_') + 1)
 
ну или прямо в коде написать
Код
C++ (Qt)
fPath = fPath.mid(fPath.lastIndexOf('_'));
А если такой путь
Цитировать
C:/Program Files (x86)/myDir/content/PROJECT_1/projFolder
Я понял что надо найти суффикс именно в имени файла
Записан
Spark
Гость
« Ответ #71 : Июль 10, 2013, 16:13 »

Я понял что надо найти суффикс именно в имени файла
Есть каталог:
C:/Program Files (x86)/myDir/content/PROJECT/
В нем создаются проектные каталоги типа (файлов нет):
C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Оставить надо только projFolder
« Последнее редактирование: Июль 10, 2013, 16:16 от Spark » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #72 : Июль 10, 2013, 16:25 »

Есть каталог:
C:/Program Files (x86)/myDir/content/PROJECT/
В нем создаются проектные каталоги типа (файлов нет):
C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Оставить надо только projFolder
Не суть - важно что в последнем имени отделенном слешем
Записан
Spark
Гость
« Ответ #73 : Июль 10, 2013, 16:35 »

Есть каталог:
C:/Program Files (x86)/myDir/content/PROJECT/
В нем создаются проектные каталоги типа (файлов нет):
C:/Program Files (x86)/myDir/content/PROJECT/abbr1_abbr2_projFolder
Оставить надо только projFolder
Не суть - важно что в последнем имени отделенном слешем
ну в общем суффикс надо оставить.
Вариант
Код
C++ (Qt)
fPath = fPath.mid(fPath.lastIndexOf('_'));
оставляет с подчеркиванием _projFolder. Подчеркивание не нужно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #74 : Июль 10, 2013, 16:43 »

ну в общем суффикс надо оставить.
Вариант
Код
C++ (Qt)
fPath = fPath.mid(fPath.lastIndexOf('_'));
оставляет с подчеркиванием _projFolder. Подчеркивание не нужно.
Обе ошибки уже обсуждались выше. Читайте
Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


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