2016-11-18 4 views
-1

Ich habe Klasse printrectangleQT erweitern Mainwindow auf andere Klasse oder diffrent Weise

class PrintRectangle : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit PrintRectangle(QWidget *parent = 0); 

private: 
    void resetClickedIndex(); 
    void updateIndexFromPoint(const QPoint& point); 
public: 
    int mXIndex; 
    int mYIndex; 
    QVector<QPoint> points; 
    bool clicked[5][5] = {}; 
    teacher tech; 
    perceptron p[5][5]; 
    double techconst = 0.1; 

signals: 

public slots: 
protected: 
    void paintEvent(QPaintEvent *); 
    void mousePressEvent(QMouseEvent *eventPress); 
}; 

und MainWindow

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private slots: 
    void on_learn_clicked(); 
    void on_classify_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

Wenn ich Schaltfläche klicken ich on_learn_clicked() Funktion aufrufen. Ich möchte clicked[5][5] Array in on_learn_clicked übertragen, weil ich dieses Array an andere Objekte senden, wenn Benutzer auf die Schaltfläche klicken. Wie macht man das?

+0

In diesem Beitrag erfahren Sie, wie Sie Parameter zu einem Slot hinzufügen können: http://StackOverflow.com/questions/5153157/passing-an-argument-to-a-slot – Noidea

Antwort

0

Es ist nicht klar, was genau die Beziehung zwischen MainWindow und dem PrintRectangle Widget ist. Ich nehme an, dass das Button-Signal und der PrintRectangle-Slot irgendwo in der MainWindow-Implementierung verbunden sind.

Eine Möglichkeit, das Problem zu lösen, wäre die Verwendung des QSignalMapper als @Noidea angegeben.

Ein anderer Weg wäre, ein Lambda als ein Schlitz beim Verbinden zu verwenden. Auf diese Weise können Sie den Absender/Empfänger oder andere Objekte im Bereich erfassen und ihre Mitglieder verwenden.

Sie einige Informationen über die Connect-Syntax in New Signal Slot Syntax

Aber im Grunde könnte man etwas schreiben wie finden: 5

connect(button, &QPushButton::clicked, this, [this, printRectangle]() 
{ 
    // do smth with clicked[5][5] from printRectangle or just 
    // retrieve it and call another method like: 
    // this->processClicked(printRectangle->clicked); 
    // or pass it to another object 
} 

Auf diese Weise könnten Sie ändern Ihre on_classify_clicked Slot zu einem regulären Verfahren mit Bool [ ] [5] Argument für die Verarbeitung.

Verwandte Themen