将字符串转换为小部件名称QT 5.6 我目前正在研究一个QT C++程序,它有超过152 QPushButtons。我想让程序做的是在满足特定条件时重新激活一个特定的QPushButton(我有四种颜色用于四种条件)。我的阵列可以跟踪每个QPushButton的每个条件,但到目前为止,我唯一能够工作的是: ui->locker100->setStyleSheet("background-color: rgb(75, 150, 255); border-color: rgb(50, 0, 128);");
其中locker100是一个特定的按钮。我想做的是将一个QString与一个数组连接起来,从而得到QPushButton的名称。它看起来像这样:将字符串转换为小部件名称QT 5.6 我目前正在研究一个QT C++程序,它有超过152 QPushButtons。我想让程序做的是在满足特定条件时重新激活一个特定的QPushButton(我有四种颜色用于四种条件)。我的阵列可以跟踪每个QPushButton的每个条件,但到目前为止,我唯一能够工作的是: ui->locker100->setStyleSheet("background-color: rgb(75, 150, 255); border-color: rgb(50, 0, 128);");,c++,qt,dynamic-programming,C++,Qt,Dynamic Programming,其中locker100是一个特定的按钮。我想做的是将一个QString与一个数组连接起来,从而得到QPushButton的名称。它看起来像这样: bool key[152]; std::fill(key, key + 152, true); Qstring widgetName = "locker"; int input = 100; if (key[input] == true) { ui->widgetName + input->setStyleSheet("backg
bool key[152];
std::fill(key, key + 152, true);
Qstring widgetName = "locker";
int input = 100;
if (key[input] == true)
{
ui->widgetName + input->setStyleSheet("background-color: rgb(75, 150, 255); border-color: rgb(50, 0, 128);");
}
但是,连接会产生错误。任何反馈和具体的代码将非常感谢。谢谢 警告您必须使用预处理器:
#定义获取按钮(id)ui->locker##id
更好的答案是:
- 您在某个标题中定义了152个按钮,例如
QPushbutton*locker1代码>。不要那样做
- 使用常量值作为键,例如
,将数据存储在enum
中,并将按钮存储在QHash
中QHash
- 使用常量访问
s和按钮更灵活,不易损坏。它还省去了预处理器,这总是一个好主意bool
//Create a map of QPushButtons with a QString key.
QMap<QString, QPushButton*> buttonMap;
//As an example I create and add a QPushButton to the map
QPushButton * input100 = new QPushButton();
buttonMap.insert("input100", input100);
//Construct the key
QString button = "input100";
// In this map .value(key) returns a QPushButton * so
// we can call what ever public functions a QPushButton
// supports like this:
buttonMap.value(button)->setStyleSheet(...);
//使用QString键创建QPushButtons的映射。
QMap按钮map;
//例如,我创建了一个QPushButton并将其添加到地图中
QPushButton*input100=新的QPushButton();
按钮映射插入(“input100”,input100);
//构造密钥
QString按钮=“input100”;
//在这个映射中,value(key)返回一个QPushButton*so
//我们可以称任何公共功能为QPushButton
//像这样的支持:
按钮映射值(按钮)->setStyleSheet(…);
使用名称作为键将假发放在地图中。然后你可以做这样的事情。mymap[widgername]->…我在查看代码时遇到问题。您介意进一步详细解释您的答案吗?或者,尽可能减少您的工作量:QString styleString=QString(“QPushButton#locker%1{背景色:rgb(75150255);边框颜色:rgb(50,0128);}”).arg(输入);此->设置样式表(样式字符串)@Devopia这真的很接近我想要实现的目标,而且非常容易实现!到目前为止,我唯一感到不安的是,它似乎重新设置了我在表单上的所有其他样式。除此之外,这个概念就像一个魅力。虽然我只是将两个字符串加在一起,但没有使用int。下面是代码:QString input=“1”;qstringstylestring=QString(“#locker”+input+”{背景色:rgb(0150255);边框颜色:rgb(50,0128);});此->设置样式表(样式字符串);关于我如何使所有样式重置的想法?我不希望代码做任何事情“#locker”+输入是一个不完整的限定符。我不知道样式表是如何解释的。谢谢你的解释。因此,我将代码复制到一个新的QtWidgets应用程序中进行测试,确保有一个名为input100的QPushButton,并且setStyleSheet(…)中填充了正确的值。结果是编译的代码没有改变按钮的颜色。但我认为你的计划是正确的。谢谢你的想法?我想你已经重新润色了这个小部件,它可以接收属性变化。这对于存储数据和按钮来说是个不错的主意。我知道QHash与QMap有一些相似之处。从彭达斯给我的代码来看,我想我还是会遇到同样的问题。代码编译,程序运行,但按钮不改变颜色。我遗漏了一些东西。这是另一个问题。:-/听起来您需要继承QPushButton
并重新实现paintEvent
。或者,您可以为按钮的状态设置图标,并使图标具有适当的颜色。它不会设置整个背景,但会将按钮状态告知用户。使用@Pemdas示例:buttonMap.value(button)->setIcon(iconForSomeState)代码>.hmmm,现在有一个想法。我从未考虑过使用图像/图标来传达按钮的状态。我要试一试。如果它有效,我将发布一段代码和说明,供像我这样正在努力解决这类问题的人使用。。。也就是说,除非有人打败我,哈哈。我能看到的一个可能的问题是,图标可能会模糊按钮的标签。考虑到所有的事情,我宁愿解决这样的问题,而不是哈哈。谢谢你的想法!