如何使用 QProcess 启动 Shell 脚本?Shell 脚本中有八个不同的命令,其中一些带有参数,另一些则没有。
我尝试使用(使用 Ubuntu 11.10)启动 Shell 脚本:
QProcess *Prozess = new QProcess();
Prozess->setWorkingDirectory(MainDirectory);
Prozess->start("/bin/sh", QStringList() << "Shell.sh");
Run Code Online (Sandbox Code Playgroud)
但这不起作用,这意味着什么也没有发生。如何使它工作?
我有以下代码:
void Processmethod()
{
QDialog *ProcessMessage = new QDialog;
Ui::DialogProcessMessage Dialog;
Dialog.setupUi(ProcessMessage);
ProcessMessage->setModal(true);
ProcessMessage->setAttribute(Qt::WA_DeleteOnClose);
ProcessMessage->show();
qApp->processEvents();
processmethodONE();
processmethodTWO();
processmethodTHREE();
}
void processmethodONE()
{
QString ProcessCommand = "w8 " + blablubli";
Prozess.setWorkingDirectory(Path); //QProcess "Prozess" is globaly defined
Prozess.setStandardOutputFile(Path); //in my class
QThread* thread = new QThread;
Prozess.moveToThread(thread);
Prozess.start(ProcessCommand);
while(!Prozess.waitForFinished(2000))
{
std::cerr << "Process running " << std::endl;
}
QProcess::ExitStatus Status = Prozess.exitStatus();
if (Status == 0)
{
std::cout << "File created!" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在此源代码中,我尝试在某些进程启动之前打开一个弹出对话框。问题是对话框不可点击,但在对话框上我想创建一个按钮来中止正在运行的方法。如您所见,我尝试使用 QThread 在另一个线程中运行进程,但仍然无法单击该对话框。此外,如果我使用“application/x-executable”文件打开我的应用程序(GUI),则在激活上述方法时会丢失对话框内容。我该如何解决这些问题?我哪里错了?你好
我有一个函数A()
,我执行其他八个'子函数',其中包括一个QProcess
.如何从所有QProcesses获取返回代码?
例:
void Mainclass::A()
{
B();
C();
// ...
I();
}
void Mainclass::B()
{
QString CommandPath = "PathB";
QProcess *Process = new QProcess(this);
Process->setWorkingDirectory(MainDir);
Process->setStandardOutputFile(MainDir + "/geometries");
Process->start(CommandPath);
Process->waitForFinished();
QProcess::ExitStatus Status = Process->exitStatus();
if (Status == 0)
{
std::cout << "App executed!" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现了这个例子,但是我不了解如何自己实现它,因为我在我的应用程序中使用指针对象.
只是Qt中常见结构化类的一部分:
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
看构造函数我不明白参数的含义(QWidget *parent = 0)
?这是什么意思?
问候
在我的一个方法中,我需要一个QFile对象:
void GUIsubclassKuehniGUI::LoadDirectory()
{
QString loadedDirectory = QFileDialog::getExistingDirectory(this,
"/home",tr("Create Directory"),
QFileDialog::DontResolveSymlinks);
ui.PathDirectory -> setText(loadedDirectory);
QFileInfo GeoDat1 = loadedDirectory + "/1_geo.m4";
QFileInfo GeoDat2 = loadedDirectory + "/2_geo.m4";
QString Value;
if (GeoDat1.exists() == true)
{
QFile GEO = (loadedDirectory + "/1_geo.m4"); // ERROR LINE HERE!
if(GEO.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream Stream (&GEO);
QString Text;
do
{
Text = Stream.readLine();
QString startWith = "start";
QString endWith = "stop" ;
int start = Text.indexOf(startWith, 0, Qt::CaseInsensitive);
int end = Text.indexOf(endWith, Qt::CaseInsensitive);
if (start != …
Run Code Online (Sandbox Code Playgroud) 我写了一个源代码,如:
int main(int argc, char *argv[]) {
QString x = "start some text here end";
QString s = "start";
QString e = "end";
int start = x.indexOf(s, 0, Qt::CaseInsensitive);
int end = x.indexOf(e, Qt::CaseInsensitive);
if(start != -1){ // we found it
QString y = x.mid(start + s.length(), ((end - (start + s.length())) > -1 ? (end - (start + s.length())) : -1)); // if you dont wanna pass in a number less than -1
or
QString y = x.mid(start + …
Run Code Online (Sandbox Code Playgroud) 我在一种方法中有这样的东西
autoPtr<LESModel> LESModel::New
95 (
96 const volVectorField& U,
97 const surfaceScalarField& phi,
98 transportModel& transport,
99 const word& turbulenceModelName
100 )
101 {
...
122 dictionaryConstructorTable::iterator cstrIter =
123 dictionaryConstructorTablePtr_->find(modelType);
...
143 return autoPtr<LESModel>
144 (
145 cstrIter()(U, phi, transport, turbulenceModelName)
146 );
147 }
Run Code Online (Sandbox Code Playgroud)
如果我是对的cstrIter
是类的变量dictionaryConstructorTable::iterator
(虽然找不到这个类)并且从第143行开始,autoPtr<LesModel>
调用构造函数并返回结果.autoPtr<LESModel>
因此,构造函数之后的括号应该是参数,因为cstrIter是一个变量,我想知道变量之后的两个括号是什么意思.也许我误读了什么?
我有这样的事情:
void ReadFileAndConvert ()
{
QFile File (Directory + "/here/we/go");
if(File.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream Stream (&File);
QString Text;
do
{
Text = Stream.readLine();
Text = Text.simplified();
// Here I want to convert the multiline QString Text into a oneline QString
// ...
}
Run Code Online (Sandbox Code Playgroud)
QString Text包含一个多行文本,我需要将其转换为在线Text/QString.我怎样才能做到这一点?问候
如果我有一些像这样的代码
main(int argc, char *argv[])
{
...
#include "Class1.H"
#include "Class2.H"
...
}
Run Code Online (Sandbox Code Playgroud)
通常,main()方法是每个应用程序的起点,main()中的内容将被执行.我是否正确假设main()中包含的所有类的内容将在main()启动时执行?
问候Streight
我想在运行时在main方法中创建一个未知数量的对象,每个对象都有一个特定的对象名.在程序结束之前,对象应该存在(main-method结束).请注意,在我的情况下,对象是Fields.
我想过这样的解决方案:
for ( i=1 ; i <= NumberOfObjects ; i++)
{
if (i==1)
{
MyClass *ObjectName1 = new MyClass();
}
if (i==2)
{
MyClass *ObjectName2 = new MyClass();
}
. //more if statements for more objects
.
.
} //for loop closed
Run Code Online (Sandbox Code Playgroud)
问题:
我不认为这个解决方案是好的,因为创建的对象的数量仍然限于for循环中的if语句.更好的解决方案?
循环中指针的范围:当退出if块时,指针超出范围.之后如何访问"新"创建的对象?