Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июнь 30, 2006, 00:46 Я novice в Qt. Работаю под Линуксом Мандрэйк 10.1
У меня есть оконное приложение, из которого надо запустить сценарий написанный на смеси gawk-bash и полученную информацию вернуть обратно в моё приложения для обработки и вывода на экран. Как это сделать подскажите помогите? Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Admin от Июнь 30, 2006, 08:47 смотри QProccess
помогает запускать другие приложения Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июнь 30, 2006, 23:41 Спасибо. Смотрю уже:)
добавлено спустя 11 часов 27 минут: Ещё вопрос! Функции в qt объявляются также как в С? в отдельном .h файле? Суть в том что я сделал функцию чтобы каждый раз не писать кучу кода, а вставить её и всё, записал в отдельный necfunctions.h файл тип QStringList func() { ... }. Написал в заголовке ui.h файла своей формы #include"necfunctions.h"(хе и в треугольных скобках тоже пробовал). Тоже самое в main.cpp сделал. И оно при компиляции мне в итоге говорит что функция моя func() находящаяся в necfunctions.h декларирована дважды, и что до этого она была декларирована в ./necfunctions.h . То есть масло масленное выходит.........чо делать. Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Admin от Июль 01, 2006, 08:55 часто пользуют такую конструкцию
в начале necfunctions.h #ifndef _NEC_FUNC_H #define _NEC_FUNC_H твой код #endif //_NEC_FUNC_H Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июль 05, 2006, 23:59 #ifndef NEC_FUNC_HI
#define NEC_FUNC_HI #include <qdir.h> #include <qfile.h> #include <qstringlist.h> #include <qstring.h> #include <qcombobox.h> QStringList allpostslist() { QString post_ID,post_place,post_status; QString configDirPath=QDir::homeDirPath()+"/monitor/config"; QDir di(configDirPath); di.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); di.setSorting(QDir::Name); QStringList list_Dir=di.entryList(); /*список всех конфигурационных файлов и в то же время АйДи номеров//строка с АйДи номером пост*/ //файл которому будет присвоено название поста QDir::setCurrent(configDirPath); /*устанавливается текущий рабочий каталог с конфигурационными файлами*/ int co1,co2; for(co1=0;list_Dir[co1]!=NULL;co1++) { post_ID=list_Dir[co1]; QFile post_file; post_file.setName(post_ID); if(post_file.open(IO_ReadOnly)) { QTextStream file_stream(&post_file); for(co2=0;co2!=6;co2++) { post_place=file_stream.readLine(); if(co2==1 && post_place=="1") { post_status=QString::fromLocal8Bit("ВКЛ."); } else if(co2==1 && post_place=="0") {post_status=QString::fromLocal8Bit("ВЫКЛ.");} } list_Dir[co1]=post_ID+" "+post_status+" "+post_place; } post_file.close(); } return list_Dir; } #endif Написал я вот такую тему в necfunctions.h. Сделал #include "necfunctions.h" в main.cpp и в formpostcontrol.h. Нажимаю make и оно мне говорит. qmake -o Makefile postcontrol.pro g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586 -mtune=pentiumpro -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/lib/qt3//include -I.ui/ -I. -I.moc/ -o .obj/main.o main.cpp g++ -o postcontrol .obj/main.o .obj/formPostControl.o .obj/moc_formPostControl.o -L/usr/lib/qt3//lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm .obj/formPostControl.o(.text+0xdfc0): In function `allpostslist()': : multiple definition of `allpostslist()' .obj/main.o(.text+0x0): first defined here collect2: ld returned 1 exit status При этом если включить этот necfunctions.h только в formpostcontrol.h а в мэйн просто тупо расписать код целиком. Всё работает. Объясните что я написал не так... Это не критично работа можно сказать сделана и без этого, но просто хочу для себя понять и разобраться. ПРИГОДИТСЯ ведь. Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Deiv от Июль 06, 2006, 07:47 Обычно в ашке прописываются прототипы функций
а вы там прописали тело функции и подключили к двум модулям косяк Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июль 06, 2006, 23:11 Прошу прощения если я удивлю вас. Что есть прототип функции?
добавлено спустя 2 минуты: Где в таком случае описывается сама функция? В теле программы? Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Deiv от Июль 07, 2006, 09:23 Цитата: "Фёдор" Прошу прощения если я удивлю вас. Что есть прототип функции? добавлено спустя 2 минуты: Где в таком случае описывается сама функция? В теле программы? Мда ... Читать вводные лекции по С или С++ както не испытываю желания В инете много электронных учебников по этим языкам Конкретно по вашему вопросу: http://www.intuit.ru/department/se/pbmsu/9/5.html Слегка кривовато, но сойдет. Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июль 07, 2006, 12:46 Cпасибо)
Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Фёдор от Июль 18, 2006, 09:39 У меня возникла проблема.
Моё оконное приложение может запускать, внешние файлы на gawk-bash-perl, их работа достаточно долгая. Выход с stderr и stdout идёт в отдельное поле textEdit. Иногда при выключенных приборах, получается так что запустив эту внешнюю программу, совершается долгая холостая работа(это можно видеть по stdout). И я сделал кнопочку, которая должна убивать процесс. Но тут и умер. QProcess *proc; Потом в SLOT отдельных связанных с кнопками я делал нечто вроде formPostControl::text() { proc=new QProcess(this); ......//вставлял сюда аргументы и т д делал нужные connect и приложение работало замечательно. } //а при переходе к SLOT убивающему процесс formPostControl::stopProc() { if(proc->isRunning()) { proc->tryTerminate(); QTimer::singleShot( 5000, proc, SLOT( kill() ) ); } else { textEditWorkingMess->setText(QString::fromLocal8Bit("Работающих процессов нет")) } } При компиляции проскакивает нормально. А при нажатии на кнопку в окне(заведомо зная что процесс щас не запущен) происходит вылет и говорится segmentation fault. Всё дело в proc->isRunning(). Что здесь неправильно? Я пробовал просто без if взять tryTerminate() и всё. При запущенном процессе оно его останавливает, а при отсутсвии запущенных процессов, вылетает моё окно. Название: Запустить gawk-bash-скрипт из оконного приложения Qt. Отправлено: Deiv от Июль 18, 2006, 11:07 Скорее всего, до этого момента объект *proc не создан
и в указателе proc записан null или мусор соответственно прога и ломается Цитата: "Фёдор" if(proc->isRunning()) попробуй предварительно проверять существование объекта if (!proc) { // работа с указателем прос } else { // прога не запущена } |