Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为小部件名称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 - Fatal编程技术网

将字符串转换为小部件名称QT 5.6 我目前正在研究一个QT C++程序,它有超过152 QPushButtons。我想让程序做的是在满足特定条件时重新激活一个特定的QPushButton(我有四种颜色用于四种条件)。我的阵列可以跟踪每个QPushButton的每个条件,但到目前为止,我唯一能够工作的是: ui->locker100->setStyleSheet("background-color: rgb(75, 150, 255); border-color: rgb(50, 0, 128);");

将字符串转换为小部件名称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

其中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("background-color: rgb(75, 150, 255); border-color: rgb(50, 0, 128);");
}

但是,连接会产生错误。任何反馈和具体的代码将非常感谢。谢谢

警告您必须使用预处理器:

#定义获取按钮(id)ui->locker##id

更好的答案是:

  • 您在某个标题中定义了152个按钮,例如
    QPushbutton*locker1。不要那样做
  • 使用常量值作为键,例如
    enum
    ,将数据存储在
    QHash
    中,并将按钮存储在
    QHash
  • 使用常量访问
    bool
    s和按钮更灵活,不易损坏。它还省去了预处理器,这总是一个好主意

我知道您正在尝试做什么,但是您不能通过简单地构造一个字符串来创建标识符,该字符串恰好是您分配给标识符的名称。结果仍然是一个QString,您正在尝试对一个不存在的QString调用方法setStyleSheet()。这告诉我,您对标识符、类型和对象的理解通常需要一些更新

我相信下面的代码可以满足您的需求

//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,现在有一个想法。我从未考虑过使用图像/图标来传达按钮的状态。我要试一试。如果它有效,我将发布一段代码和说明,供像我这样正在努力解决这类问题的人使用。。。也就是说,除非有人打败我,哈哈。我能看到的一个可能的问题是,图标可能会模糊按钮的标签。考虑到所有的事情,我宁愿解决这样的问题,而不是哈哈。谢谢你的想法!