c++ 编译错误“无法调用没有对象的成员函数”

9q78igpj  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(130)

我尝试为已经创建的C程序创建GUI(一个图像刮刀)。图像刮刀的工作,但我试图实现的GUI,允许用户输入一个网站,以刮取图像从到一个行编辑框(行编辑),然后点击按钮(按钮)它从行编辑框中获取输入文本,并将其用作在后台运行C程序的参数。上面提到的。“
下面是我的代码,头文件和主文件没有被更改,任何更改都是通过GUI设计器完成的,而不是手动更改。

#include "mainwindow.h"
#include "ui_mainwindow.h"

char *arguments;

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString program = "~/Desktop/IS";
    QString arguments = QLineEdit::text(); //error on this line

    QProcess *myProcess = newQProcess(parent);
    myProcess->start(program, arguments);

}

字符串

5cg8jx4n

5cg8jx4n1#

所有错误都在on_pushButton_clicked()中。

  1. newQProcess之间缺少空格。
    1.作用域中没有parent变量。当然,QObject有一个parent()成员。您可以简单地将进程父化到窗口本身。
    1.你不能在没有对象的情况下调用QLineEdit::text,就像错误所说的那样。只有 * 你 * 知道你需要什么对象。现在让我们假设对象是ui->myLineEdit
    1.波浪线扩展由shell完成。内核不知道波浪线是什么,QProcess也不知道。您需要提供可执行文件的完整路径。
    1.主目录也不总是可以从HOME环境变量中获得。它应该从可移植的QDir::homePath()中获得。
  2. QProcess::start()不接受两个字符串。它需要一个字符串列表作为第二个参数。由于您只打算提供一个参数,因此将其 Package 在字符串列表中是一件简单的事情。
void MainWindow::on_pushButton_clicked()
{
   QString program = QDir::homePath() + "/Desktop/IS";
   QProcess *myProcess = new QProcess(this);
   myProcess->start(program, QStringList(ui->myLineEdit->text()));
   // The variant above is slightly shorter then the equivalent line below:
   myProcess->start(program, QStringList() << ui->myLineEdit->text());
}

字符串

k4ymrczo

k4ymrczo2#

在你的主窗口窗体上创建一个名为“InputWebSite”的行编辑
然后替换

QString arguments = QLineEdit::text();

字符串

QString arguments = ui->InputWebSite->text();

相关问题