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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: QtCreator + Boost  (Прочитано 22361 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #30 : Август 01, 2011, 23:58 »

Еще раз спасибо. На пробелах... Разве економил?
вот при написании сообщений после запятых пробелы ставишь, а в коде - нет
По поводу кирилици, а если умеешь понимать общий смысл текста на англ, но неуверенно и грамматически неправильно пишешь на англ, как тогда? На инглише не проканает.
тогда да, лучше на русском. но не забывать о UTF-8.
Записан

Изучением 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
Lagovas
Гость
« Ответ #31 : Август 03, 2011, 00:34 »

И еще вопрос, что б не городить левую тему. Что б прога работала, надо подключать QtCored4 и QtGuid. А нельзя ли как то без них или что бы в ехе вшивались как то? А то реально, прога маленькая, для копирования, а дллки весят ~ 180 мб. Даже стыдно скидывать свою прогу кому то с таким размером. В С# только ехе хватало. Конечно, нужен .NET Framework, но если писать на 4.0 то там 55 метров, но не 180 ведь) Плюс ко всеми, ведь делают как то проги с окошками по пару метров. В общем никак 180 сократить нельзя?
« Последнее редактирование: Август 03, 2011, 00:36 от Lagovas » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #32 : Август 03, 2011, 01:31 »

какие 180 метров? тебе нужны только QtGui4.dll и QtCore4.dll скорее всего (если никаких дополнительных модулей не подключал) - в сумме метров 10, а при архивировании раза в 3 меньше. буква d в названии дллки означает, что она предназначена для дебаг-версии, а распространяют-то обычно релиз-версию. чтоб построить релиз-версию, надо выбрать соответствующую опцию в креаторе (слева на панеле где компьютер нарисован).

если хочешь, чтоб дллки вшивались в программу, то надо делать static сборку Qt из исходников (на форуме совсем недавно несколько раз обсуждалось, используй поиск).
Записан

Изучением 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
Lagovas
Гость
« Ответ #33 : Август 03, 2011, 02:06 »

у меня при запуске ехе требует QtGuid4, который 150 мб весит.
П.С. Все, кинул туда обычны QtGui4 и QtCore4 и ок. Извините за наезд, Qt рулит.
П.С. из под Вин под Лин можно компилить? Типа какого нить ключа g++ -o hello hello.cpp -spec linux или подобного?
« Последнее редактирование: Август 03, 2011, 02:12 от Lagovas » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #34 : Август 03, 2011, 08:04 »

из под Вин под Лин можно компилить?
нет. а вот наоборот - можно.
Записан

Изучением 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
Lagovas
Гость
« Ответ #35 : Август 03, 2011, 13:11 »

Я выполняю команду в консоли QProcess::execute("program",args);
Можно ли как то выловить вывод этой командый? В моем случае распаковка архивов, и мне нужен вывод, что бы в окно выводить какие файлы распакованы. Можно конечно сканировать папку куда распаковывается, и выводить файлы папки, но интереснее вывод словить. Заранее благодарен.
Записан
b-s-a
Гость
« Ответ #36 : Август 03, 2011, 14:16 »

Ты документацию на QProcess посмотри. Там все написано. Разве что тебе придется отказаться от execute() в пользу start().
Записан
Lagovas
Гость
« Ответ #37 : Август 03, 2011, 15:07 »

Если мне надо несколько команд выполнить, надо несколько раз start() делать? Он создает каждый раз новый процесс или просто выполняет команду? Если каждый раз новый процесс, то как тогда можно в том же процессе еще команды повыполнять?
Попробовал пару раз start намутить, фиг. Попробовал write() еще команды написать, фиг. Я так понял надо ждать пока этот закончит работу, потом опять Start, опять создается процесс и выполняется? 2 раза создавать процесс на 2 команды? Иначе никак?

П.С. Потестил, если не создавать обьекта QProcess, а обьявлять QProcess obj, то процесс не создается, а просто выполняются команды. Только хз как в этом случае идет работа с памятью. Этот obj помещается в стек функции, как я понимаю. И уничтожается, как только функция заканчивается. Только и процесс никакой не создается, но выполняет. Как же так? И правильно ли я понял работу памяти в данном случае?

П.С. Решил юзать старт 2 раза. Но загвоздка вышла. Не хочет команду выполнять, хотя тестирую в консоли, все ок. В общем вот код.
Код:
void NarutoMove::extracting(QString archiveFrom,QString dirTo)
{
    QProcess rar;
    rar.start("Rar.exe",QStringList()<<"vb"<<archiveFrom); //содержимое архива

    if (!rar.waitForStarted())
             logTextEdit->append("not waitForStarted");

    if (!rar.waitForFinished())
        logTextEdit->append("not waitForFinished");

    QRegExp reg(".+\\d+\\.\\w{3}");//blablabla\01.jpg
    QStringList filesToExtract;
    QString str;
    filesToExtract<<"e"<<"-o+ -idcdp"<<archiveFrom;//e - extract, -o+ - перезапись, -idcpd - убираем лишний вывод
    while(rar.canReadLine())//добавляем файлы для извлечения
    {
        str=rar.readLine();
        if(reg.indexIn(str)!=-1)
            filesToExtract.append("-n"+str);//-n для добавления файла на выполнение. нужно больше 1 файла

    }
    filesToExtract<<dirTo;
    logTextEdit->append(filesToExtract.join(" "));
    rar.start("Rar.exe",filesToExtract);
    if (!rar.waitForStarted())
             logTextEdit->append("not waitForStarted");

    if (!rar.waitForFinished())
        logTextEdit->append("not waitForFinished");

    QString result = QString(rar.readAll());

    logTextEdit->append(result);
}
Первую команду выполняет, а вторую по разархивированию не хочет, пишет нечего извлекать. Пробую в консоли, хавает. Для работы нужен rar.exe из winrar, если что.
« Последнее редактирование: Август 03, 2011, 17:40 от Lagovas » Записан
b-s-a
Гость
« Ответ #38 : Август 03, 2011, 17:36 »

Какой-то у тебя поток слов слабо связанных друг с другом. Причем тут память вообще?

Когда ты создаешь объект класса QProcess, то естественно никакие процессы не запускаются. А вот когда ты делаешь start, то тогда и происходит запуск. Выполнение идет в фоновом режиме, таким образом ты можешь читать/писать из/в stdout+stderr/stdin программы. Если же тебе необходимо выполнить еще одну команду, то никто не запрещает вызвать еще раз start. Но перед этим стоит убедиться, что предыдущий процесс завершился (дождаться его завершения или убить принудительно - есть такие методы).
Если твоя программа покидает область видимости объекта QProcess, то происходит его уничтожение. Последствия этого описаны в документации (запущенная через QProcess программа убивается).
А на счет памяти не беспокойся. Невозможно в современных ОС запустить программу внутри своей (иначе вирусы цвели и пахли).
Записан
Lagovas
Гость
« Ответ #39 : Август 03, 2011, 17:43 »

Я уже разобрался более менее, посмотри плз пост выше, нужна помощь в том коде по аргументам. Не хавает чего то.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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