简体   繁体   English

如何正确地从另一个文件调用函数?

[英]How correctly to call a function from another file?

OK, let's start again... 好,让我们重新开始...

I've created an project (Qt Widget Application) with Qt Creator. 我已经使用Qt Creator创建了一个项目(Qt Widget Application)。

My project structure: 我的项目结构:

  • myproject.pro myproject.pro

    • Headers 标头

      • dialogform.h dialogform.h

      • mainwindow.h 主窗口

    • Sources 资料来源

      • dialogform.cpp dialogform.cpp

      • main.cpp main.cpp

      • mainwindow.cpp 主窗口

    • Forms 形式

      • dialogform.h dialogform.h

      • mainwindow.h 主窗口

When I click on DialogForm pushbutton, I need to call the clear() function from MainWindow 当我单击DialogForm按钮时,我需要从MainWindow调用clear()函数。

In my code below, my project is running, but, the clear() function does not clear the lineedit. 在下面的代码中,我的项目正在运行,但是clear()函数不会清除lineedit。

Do anyone known how can i fix this? 有谁知道我该如何解决?

Thank you very much! 非常感谢你!

dialogform.h dialogform.h

#ifndef DIALOGFORM_H
#define DIALOGFORM_H

#include <QDialog>

namespace Ui {
class DialogForm;
}

class DialogForm : public QDialog
{
    Q_OBJECT

signals:
    void clearMainWindow();

public:
    explicit DialogForm(QWidget *parent = 0);
    ~DialogForm();

private slots:
    void on_pbClearLineEdit_clicked();

private:
    Ui::DialogForm *ui;
};

#endif // DIALOGFORM_H

mainwindow.h 主窗口

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void clear();

private slots:
    void on_pbCallDialog_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

dialogform.cpp dialogform.cpp

#include "dialogform.h"
#include "ui_dialogform.h"
#include "mainwindow.h"

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

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

void DialogForm::on_pbClearLineEdit_clicked()
{
    connect(); // need help here. I'm using Qt 5.6.1
}

main.cpp main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp 主窗口

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

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

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

void MainWindow::on_pbCallDialog_clicked()
{
    DialogForm *dialogForm = new DialogForm(this);
    dialogForm->show();
}

void MainWindow::clear()
{
    ui->lineEdit->clear();
}

myfunction accesses an attribute of class myfile . myfunction访问类myfile的属性。 Therefore it either needs to be a method of myfile as well, or it could be a friend function of the class myfile . 因此,它也必须是myfile的方法,或者它可能是myfile类的朋友函数。 In the latter case, however, you would need to give the relevant instance of myfile to myfunction as an argument. 但是,在后一种情况下,您需要将myfile的相关实例作为参数提供给myfunction All usages of myfunction would need to be updated in either case. 在两种情况下, 需要更新myfunction的所有用法。

The solution: 解决方案:

DialogForm::DialogForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogForm)
{
    ui->setupUi(this);
    connect(ui->pbClearLineEdit, &QPushButton::clicked, static_cast<MainWindow*>(parent), &MainWindow::clear);
}

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

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