Qt Designer - Comment connecter un signal à une fonction statique?

Très bien, je suis à l'aide de Qt Designer pour créer une interface graphique. J'ai réussi à comprendre comment faire de la barre de menu et j'ai ajouté quelques actions à la barre, mais maintenant j'ai besoin de connecter les actions de leur faire faire quelque chose.

Plus précisément, sur mon menu fichier, j'ai le simple ouvert d'action. Je veux cette action pour exécuter une fonction qui s'appelle mon QFileDialog et ainsi de suite, mais je ne sais pas comment faire.

Alors, comment puis-je connecter mon actionOpen à ma fonction statique?

Je suis en utilisant le dernier Qt, 5.0.2

Je suis un peu frustré ici. C'est évidemment l'un des la plupart des choses de base quelqu'un pourrait avoir besoin de le faire, et pourtant je ne trouve pas de réelle solution à ce n'importe où sur le web. De l'absence de Qt wiki, pour les questions des autres personnes, personne ne semble vraiment avoir une réponse claire. Il y a des réponses pour les anciennes versions de Qt, mais dans ces anciennes versions apparemment signaux ne pouvait pas se connecter à des fonctions statiques, donc, ceux qui sont hors de propos. Et personne ne semble savoir comment faire cela dans le Qt Designer. Aussi, personne n'a jamais précise où mettre quoi.

J'ai cette ligne dans mon main.cpp fichier:

QObject::connect(actionOpen, &actionOpen::triggered, fileOpen)

J'ai un objet appelé "actionOpen" made in Qt Designer, il est un signal appelé déclenchée, et j'ai une fonction définie juste en dessous de mon principal à l'intérieur de main.cpp appelé "fileOpen'. Ce qui semble suivre la syntaxe correcte, mais il génère de nombreuses erreurs.

Aussi, je peux vous cliquez plusieurs fois sur construire dans Qt Creator, et chaque fois qu'il arrive, avec un nombre différent d'erreurs, de disparaître et de réapparaître, sans même me toucher le code. Je commence à penser que cette IDE est une sorte de POS.

EDIT:

Voici mes fichiers. Peut-être que cela aidera un peu.

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

private:
    Ui::MainWindow *ui;
};

#endif //MAINWINDOW_H

main.cpp

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

using namespace std;


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 <iostream>

using namespace std;



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QObject::connect(ui->actionOpen, &QAction::triggered, &MainWindow::fileOpen);
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;

}

void fileOpen()
{

    /*
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(),
        tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly)) {
            QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
            return;
        }
        QTextStream in(&file);
        ui->textEdit->setText(in.readAll());
        file.close();
    }
    */

    cout << "Hello!";
}
Ce n'est pas "l'un des la plupart des choses de base'. Les signaux sont généralement connectés à des machines à sous sont non-fonctions membres statiques de QObject les classes dérivées. Je vous recommande pour l'utilisation de l'fentes. La connexion à une fonction statique doit être utilisée que si elle est vraiment nécessaire.
Alors, comment pourrais-je aller à ce sujet? Vous dites que j'ai besoin de créer ma propre classe pour la actionOpen objet, héritant de QObject, et donnez-lui un membre de la fonction à exécuter? Cela semble un peu bidon, d'avoir à créer une classe pour chaque objet et de l'action dans Qt Designer que je veux utiliser. Je peux voir généralement les signaux sont envoyés à partir d'un objet à un logement d'un autre objet, mais pour une simple commande ouvrir le fichier, il n'y a pas d'objet récepteur. Je ne comprends pas comment ce modèle de la connexion marche bien dans ce cas.
Double Possible?: stackoverflow.com/questions/9428038/...
Nope, j'ai lu ce message, et ma question n'est toujours pas répondu. Ce post fait référence à l'ancienne syntaxe, et la réponse sommet des liens vers une page sur la nouvelle syntaxe, j'ai aussi lu et je suis toujours confus au sujet de.
Désolé mec, je n'ai jamais essayé de le faire. Je souhaite que je pourrais aider.

OriginalL'auteur krb686 | 2013-06-17