繁体   English   中英

我的Qt代码无法编译“无法调用没有对象的成员函数”

[英]My Qt code doesn't compile with “cannot call member function without object”

所以我很难找到解决方案,不知道我哪里出错了。 我是QT(今天)的新手,我不确定我是否做得对。

我正在尝试为已经创建的c程序(图像处理程序)创建GUI。 图像刮刀工作,但我正在尝试实现GUI,允许用户输入网站将图像从线条编辑框(lineEdit)中删除,然后点击按钮(pushButton),它从中获取输入文本行编辑框并将其用作在后台运行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);

  }

所有错误都在on_pushButton_clicked()

  1. newQProcess之间缺少空间。

  2. 范围内没有parent变量。 当然,还有QObjectparent()成员。 您可以简单地将进程父级指向窗口本身。

  3. 如错误所示,您无法在没有对象的情况下调用QLineEdit::text 只有知道你需要什么对象。 我们现在假装对象是ui->myLineEdit

  4. 波浪扩展由外壳完成。 内核不知道代字号是什么, QProcess也不知道。 您需要提供可执行文件的完整路径。

  5. HOME环境变量中的主目录也不总是可用。 它应该从便携式QDir::homePath()

  6. QProcess::start()不带两个字符串。 它需要一个字符串列表作为第二个参数。 由于您只打算提供一个参数,因此将其包装在字符串列表中是一件简单的事情。

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());
}

在你的MainWindow表单上只需创建一个名为'InputWebSite'的lineEdit

然后更换

 QString arguments = QLineEdit::text();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM