QT将MainWindow扩展到其他类或不同的方式

时间:2016-11-18 15:52:03

标签: c++ qt

我上课printrectangle

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

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

当我点击按钮时,我呼叫on_learn_clicked()功能。我想将clicked[5][5]数组转移到on_learn_clicked,因为我在用户点击按钮时将此数组发送到其他对象。这该怎么做?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚MainWindow与PrintRectangle小部件之间的关系究竟是什么。我想按钮信号和PrintRectangle插槽连接在MainWindow实现中的某个地方。

解决问题的一种方法是使用QSignalMapper作为@Noidea声明。

另一种方法是在连接时使用lambda作为插槽。这样,您可以捕获范围内的发件人/收件人或其他对象并使用其成员。

您可以在New Signal Slot Syntax

中找到有关连接语法的一些信息

但基本上你可以这样写:

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
}

这样你就可以使用bool [5] [5]参数将on_classify_clicked插槽修改为常规方法来进行处理。