我对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;
答案 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
信号连接到它。