QT如何将变量传递到主窗口

时间:2019-12-23 10:01:56

标签: c++ qt

我对QT和C ++非常陌生,我需要将一些变量传递给主窗口(即:int a,double b,int c ...)。在互联网上,他们说使用全局变量不是实现它的适当方法。因此,我需要使用信号时隙方法。但是我不知道如何使用信号槽将变量传递到不同的窗口。在那种情况下,我应该在当前窗口中声明插槽,而在另一个窗口中声明插槽吗?像这样工作吗?

//somewhere in the current window
 int a=10;
 connect (&a, &QPushButton::pressed(), mainwindow, &b);

//In main window
int b;

1 个答案:

答案 0 :(得分:1)

在Qt中,UI组件之间的通信使用信号和插槽进行。 因此,您应该传达一些使用信号更改的变量:

class SomeWindow : public QWindow {
private:
    int a;
signals:
    void aChanged(int a);
// more, of course.
}

SomeWindow类的某些事件处理程序中,您将具有:

a = someInput.toInt();
emit aChanged(a);

例如,在另一个窗口中,您想要同步其自己的a_copy变量:

class AnotherWindow : public QWindow {
private:
    int a_copy;
public slots:
    void aChangedHandler(int a);
// more, of course.
};

void AnotherWindow::aChangedHandler(int a) {
    a_copy = a;
}

最后,您可以使用QObject::connect将它们绑在一起:

QObject::connect(someWindow, &SomeWindow::aChanged, anotherWindow, &AnotherWindow::aChangedHandler);

有时,将信号传播到AnotherWindow是有意义的,以便您可以从类内部将更多处理程序附加到该信号上。在这种情况下,您将在aChanged(int a)中创建一个AnotherWindow信号,并将SomeWindow::aChanged信号连接到它。