如何让多个Qt按钮返回每个不同的值
How to have multiple Qt buttons return each different values
我对Qt相对较新,我一直在试图弄清楚如何让不同的按钮在单击时返回一个特定的值。我已经通读了关于信号和插槽的Qt文档,但我没有找到有用的东西。
我知道我可以使用单击的函数并使用"goto 插槽"返回一个值,但是,从主要开始,我只想调用一个 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: no so slot QEventLoop::choice0Clicked(&choice)
QObject::连接:(发件人姓名:"管理员工")
QObject::connect: no like slot QEventLoop::choice1Clicked(&choice)
QObject::连接:(发件人名称:"查看")
QObject::连接:没有这样的插槽 QEventLoop::choice2Clicked(&choice)
QObject::连接:(发件人名称:"生成工资单")
我真的相信这样做更好,所以如果有,有人可以解释一下吗?
如果您有什么需要我详细说明的,请在评论中告诉我。
谢谢
您可以使用QSignalMapper。
来自Qt助手:
此类收集一组无参数信号,并重新发出它们 使用与对象对应的整数、字符串或小部件参数 发送信号
signalMapper = new QSignalMapper(this);
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
}
connect(signalMapper, SIGNAL(mapped(QString)),
this, SIGNAL(clicked(QString)));
您不能使插槽过载。它应该与信号签名匹配。
它应该只是这样的
QObject::connect(ui->manageEmployee, SIGNAL (clicked()), &waitForResponse, SLOT(choice0Clicked()));
QObject::connect(ui->view, SIGNAL (clicked()), &waitForResponse, SLOT(choice1Clicked()));
QObject::connect(ui->generatePayroll, SIGNAL (clicked()), &waitForResponse, SLOT(choice2Clicked()));
现在来到按钮索引
假设您有按钮 - "按钮1","按钮2"和"按钮3"。
创建"QButtonGroup"对象。
QButtonGroup *bGroup = new QButtonGroup ();
添加所有带有 ID 的按钮。
bGroup->addButton(button1, 0);
bGroup->addButton(button2, 1);
bGroup->addButton(button3, 2);
现在在插槽中获取按钮的ID:
void OptionMenuWindow::choice0Clicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
int buttonID = bGroup->id(button);
}
void OptionMenuWindow::choice1Clicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
int buttonID = bGroup->id(button);
}
void OptionMenuWindow::choice2Clicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
int buttonID = bGroup->id(button);
}
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 问:如何使用C++中的按钮从窗口打开窗口
- QT-如何通过按下按钮从子窗口小部件返回到父窗口小部件
- 如何让多个Qt按钮返回每个不同的值
- QDialog:需要按下按钮或返回值
- 按下按钮时,键盘矩阵代码未返回正确的列号
- MessageBox-当框没有“取消”按钮时返回值
- 返回在UIAlertView上按下按钮的结果给c++方法