【发布时间】:2017-08-26 07:52:37
【问题描述】:
我对 Qt 比较陌生,我一直在试图弄清楚如何让不同的按钮在被点击时返回一个特定的值。我已经阅读了关于信号和插槽的 Qt 文档,但我没找到有用的东西。
我知道我可以只使用 clicked 函数并使用“goto slot”返回一个值,但是,我想从主函数中调用一个 getChoice 函数,该函数将打开一个新窗口并基于用户点击我会返回一个对应的 int 供以后使用。像这样的东西就是它的主要外观。
OptionMenuWindow option;
int choice = option.checkChoice();
这是我在 OptionMenuWindow 类中的代码,我尝试将一个 int 作为引用传递给插槽,以便在激活choice0Clicked 时我知道单击了哪个按钮。
int OptionMenuWindow::checkChoice(){
this->show();
QEventLoop waitForResponse;
//THIS IS WHERE I TRY AND DO THAT
connect(ui->manageEmployee, SIGNAL (clicked()), &waitForResponse, SLOT(choice0Clicked()));
connect(ui->view, SIGNAL (clicked()), &waitForResponse, SLOT(choice1Clicked()));
connect(ui->generatePayroll, SIGNAL (clicked()), &waitForResponse, SLOT(choice2Clicked()));
waitForResponse.exec();
cout << "here" << endl
cout << choice << endl;
return choice;
}
void OptionMenuWindow::choice0Clicked()
{
choice = 0;
}
void OptionMenuWindow::choice1Clicked()
{
choice = 1;
}
void OptionMenuWindow::choice2Clicked()
{
choice = 2;
}
选择在头文件中定义。
这是我得到的错误:
QObject::connect: 没有这个槽 QEventLoop::choice0Clicked(&choice)
QObject::connect:(发件人姓名:'manageEmployee')
QObject::connect: No such slot QEventLoop::choice1Clicked(&choice)
QObject::connect:(发送者名称:'view')
QObject::connect: No such slot QEventLoop::choice2Clicked(&choice)
QObject::connect:(发件人姓名:'generatePayroll')
我真的相信这样做会更好,所以如果有的话,有人可以解释一下吗?
如果您有什么需要我详细说明的,请在 cmets 中告诉我。
谢谢
【问题讨论】:
-
你把事情搞砸了,the signature of a signal must match the signature of the connected slot。尝试关注Qt's examples 中的任何一个,看看单击按钮时的操作是如何完成的
标签: c++ qt button qt-signals slots