我有一个小问题 . 我想在AnotherWindow的MainWindow中运行函数 . 我不能为它设置 connect()
.
Main class: MainWindow
Other form: AnotherWindow
Function in main class: setVariable(QString)
Function in other form: btnClicked()
我现在连接按钮信号 clicked()
:
// In AnotherWindow.cpp
connect(ui->btnOK, SIGNAL(clicked()), this, SLOT(btnOkClicked()));
// Function in same file
void interfaceWindow::btnOkClicked() {
/* Some actions - emit signal? */
this->close();
}
btnOkClicked()
被声明为私人广告位 .
// In MainWindow.cpp
void MainWindow::setVariable(QString _var) {
this->var = _var;
}
setVariable(QString)
被声明为公共插槽 .
我如何从AnotherForm(从 btnOkClicked()
函数)发送变量到MainWindow( setVariable(QString)
函数)?我必须如何以及在何处发送信号并 Build 连接?
我喜欢信号和插槽,但我的代码不起作用 - 我不粘贴它,因为它很可怕:)
Qt新手有什么帮助吗?
3 回答
您需要在MainWindow中引用AnotherWindow,反之亦然 . 那你需要以下东西:
下一步取决于MainWindow是否引用AnotherWindow,反之亦然 . 你可以:
要么:
如果您通过信号调用插槽,则它不应该是私有的或公共的(请参阅Qt Documentation) . 希望这可以帮助 .
我不完全确定我理解你的问题,但让我试试 .
您希望能够在另一个类中触发一个插槽 . 有几种方法可以做到这一点 .
将一个作为朋友类声明给另一个 . 然后他们可以看到
protected
和private
变量/成员可以使插槽静态,因此您可以在没有类对象的情况下调用它们 .
例如,
前面是伪代码,所以不要指望它编译 . 我想这就是你想要的 . 基本上,因为你的插槽在
MainWindow
是私人的,你需要把它变成朋友 . 要连接,它需要是一个成员 . 然后当onButtonClicked
插槽被唤起时,它fire()
是setVarialbe()
插槽 .这是另一个窗口的简单代码:
现在在MainWindow中创建一个MyWidget对象(假设为myWid)并将其连接到slot
信号将字符串传递给插槽 .
在制作信号和插槽时,请注意以下几点:
要将信号连接到插槽(或另一个信号),它们必须具有相同的参数
信号和插槽中的参数顺序应相同 .
如果信号的参数多于它所连接的插槽的参数,则简单地忽略附加参数,但不可能相反 .
如果要将具有不匹配参数的信号连接到插槽,则不会发生编译时错误,但在运行时命令窗口将显示警告信号/插槽/连接不存在 .