LINUX.ORG.RU

передача значения lineEdit


0

0

есть реализация класса *.cpp

#include <QtGui> #include "gotocelldialog.h" #include <unistd.h> GoToCellDialog::GoToCellDialog(QWidget *parent) :QDialog(parent) { setupUi(this); QRegExp regExp("[/~][0-9A-Za-z/.]{5,}"); lineEdit->setValidator(new QRegExpValidator(regExp, this)); connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(okButton, SIGNAL(clicked()), this, SLOT(startMencoder())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); } void GoToCellDialog ::on_lineEdit_textChanged() { okButton->setEnabled(lineEdit->hasAcceptableInput()); } void GoToCellDialog ::startMencoder() {

int result; char param1[]="/home/saibogo/programs/test/test1.avi"; result=execlp("/home/saibogo/scripts/mencoderscript.sh","mencoderscript.sh",(li neEdit->text()),param1,NULL); //result=execlp("/usr/bin/mencoder","mencoder","-ofps 22 -vf-add scale=320:240 -vf-add expand=320:240:-1:-1:1 -srate 44100 -ovc xvid -xvidencopts bitrate=500:max_bframes=0:quant_type=h263:me_quality=4 -oac lavc -lavcopts acodec=mp2:abitrate=128",argv[1],"-o",argv[2],NULL);

}

есть собственно сам класс *.h

#include <QtGui> #include "gotocelldialog.h" #include <unistd.h> GoToCellDialog::GoToCellDialog(QWidget *parent) :QDialog(parent) { setupUi(this); QRegExp regExp("[/~][0-9A-Za-z/.]{5,}"); lineEdit->setValidator(new QRegExpValidator(regExp, this)); connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(okButton, SIGNAL(clicked()), this, SLOT(startMencoder())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); } void GoToCellDialog ::on_lineEdit_textChanged() { okButton->setEnabled(lineEdit->hasAcceptableInput()); } void GoToCellDialog ::startMencoder() {

int result; char param1[]="/home/saibogo/programs/test/test1.avi"; result=execlp("/home/saibogo/scripts/mencoderscript.sh","mencoderscript.sh",(li neEdit->text()),param1,NULL); //result=execlp("/usr/bin/mencoder","mencoder","-ofps 22 -vf-add scale=320:240 -vf-add expand=320:240:-1:-1:1 -srate 44100 -ovc xvid -xvidencopts bitrate=500:max_bframes=0:quant_type=h263:me_quality=4 -oac lavc -lavcopts acodec=mp2:abitrate=128",argv[1],"-o",argv[2],NULL);

}

подскажите как правильно передать значение поля ввода lineEdit в слот-функцию startMencoder()? Заранее спасибо

★★★★

блин как то коряво листинг вставился. Ну короче есть поле ввода lineEdit есть функция слот/ нужно текст из поля ввода передать в функцию по сигналу. Сигнал определен и работает. не могу понять только как использовать значение text элемента lineEdit

saibogo ★★★★
() автор топика

> result=execlp("/home/saibogo/scripts /mencoderscript.sh","mencoderscript.sh",(lineEdit->text()),param1,NULL);

execlp("/home/saibogo/scripts /mencoderscript.sh","mencoderscript.sh",lineEdit->text().toUtf8().data(),param1 ,NULL);

кстати, что-то не вижу в коде форка. надеюсь, вы в курсе, что при успешном вызове функци execlp() она уже не вернётся?

arsi ★★★★★
()
Ответ на: комментарий от arsi

спасибо за подсказку. А возвращать мне управление в данном варианте и не нужно сосбственно потому и выбрал ее. потом может переосмыслю чего нить

saibogo ★★★★
() автор топика
Ответ на: комментарий от arsi

>lineEdit->text().toUtf8().data()

есть подозрения, что на момент вызова execlp указатель перестанет быть валидным.
зависит, конечно, от времени жизни временного объекта QByteArray? возвращаемого из toUtf8.

я вот не в курсе, как там сейчас с этим дела обстоят. посмотреть лень, и всегда заводил локальную переменную-объект.

xydo ★★
()
Ответ на: комментарий от xydo

> есть подозрения, что на момент вызова execlp указатель перестанет быть валидным.

ни в коем случае. если бы так было, половина куте просто было бы неработоспособным. динамически созданные объекты при вызове функции уничтожаются сразу после завершения функции, но ни в коем случае не до её выполнения.

можете проверить несложным кодом:

#include <stdio.h>

class X {
public:
    X() { printf("-- created --\n"); }
   ~X() { printf("-- destroyed --\n"); }
    int val() const { return 100500; }
};

void print(int val) { printf("[%d]\n", val); }

int main() {
    print(X().val());
    printf("done.\n");
    return 0;
}
вывод:
-- created --
[100500]
-- destroyed --
done.
и это несмотря на константное скалярное возвращаемое значение, отсутствие в классе данных и опцию компиляции -О3 ;)

arsi ★★★★★
()
Ответ на: комментарий от xydo

собственно все отлично работает. просто надо было сразу ассистент мне читать

saibogo ★★★★
() автор топика
Ответ на: комментарий от arsi

с какого это перепоя char*, возвращаемый data(), стал "динамически созданным объектом"?
как бы data() отработала, вернула неотслеживающийся указатель. и всё! временный объект можно удалять, т.к. к нему запросов больше нет...

xydo ★★
()
Ответ на: комментарий от xydo

указатель станет невалидным после отработки функции execlp() (если бы она делала return)

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.