gpt4 book ai didi

Qt:如何使用 QSignalMapper 为非标准按钮实现 QDialogBu​​ttonBox ?

转载 作者:行者123 更新时间:2023-12-01 23:07:41 26 4
gpt4 key购买 nike

我有一个带有所有标准按钮和非标准按钮的 QDialogBu​​ttonBox(添加 QPushbutton 以创建非标准按钮)。

我可以为非标准按钮单独实现 SignalMapper。但在这种情况下,我必须添加 2 个插槽(用于 QDialogBu​​ttonBox 标准按钮的插槽和用于非标准按钮的插槽)。

我需要为标准按钮和非标准按钮实现带有公共(public)插槽的 QSignalMapper。

有人可以指导我吗?

最佳答案

您不需要将 QSignalMapperQDialogBu​​ttonBox 一起使用。

QSignalMapper 用于将多个信号连接到单个插槽,并且 QDialogBu​​ttonBox 已经有一个为所有按钮发出的信号:clicked(QAbstractButton *).

您可以简单地使用 map (QMapstd::map)或通过动态属性为按钮赋值:

enum { MyRole1 = 1, MyRole2 }; // starting at 1 because an unset property would return 0
...
userButton−>setProperty("ActionRole", MyRole1); // a cast to int might be needed here
buttonBox->addButton(userButton, QDialogButtonBox::ActionRole);

connect(this, SIGNAL(clicked(QAbstractButton*)), SLOT(dialogButtonClicked(QAbstractButton *button)));

在槽中,你会从信号传递的参数中取回值:

void MyClass::dialogButtonClicked(QAbstractButton *button) {
StandardButton standardButton = buttonBox−>standardButton(button);
switch(standardButton) {
// Standard buttons:
case QDialogButtonBox::Ok:
...
break;
case QDialogButtonBox::Abort:
...
break;

// Non-standard buttons:
case QDialogButtonBox::NoButton:
int actionRole = button->property("ActionRole").toInt();
switch(actionRole) {
case MyRole1:
...
break;
case MyRole2:
...
break;
default:
// shouldn't happen
break;
}

}
}

关于Qt:如何使用 QSignalMapper 为非标准按钮实现 QDialogBu​​ttonBox ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16274105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com