我需要开发一个数独游戏。在读取包含数字值的文本文件后,我创建了9 * 9个小部件。
如果(该值已经设置,那么我实例化为包含该数字的Exception in thread "main" java.lang.InternalError: Can't connect to X11
window server using ':0' as the value of the DISPLAY variable.
,
否则我实例化一个包含每种情况的可能值的组合框。)
直到这里一切都好。 问题是,当从组合框中选择一个值时,我需要在我的视图(MVC)中以正方形绘制它。问题是我怎么知道选择了哪一个?
我可以从组合框信号中使用的唯一信号是qlabel
,但我不知道哪个组合产生了该信号。
对我来说理想的是这样currenttextchanged(QString)
,但我不知道我是否可以定义一个新信号?
以下是一些代码:
SIGNAL(curretextchanged(QString, int, int))
答案 0 :(得分:1)
一种解决方案是在连接到特定组合框的信号时附加额外信息。
例如,假设您有函数update(QString text, int x, int y)
,那么您可以将信号附加到lambda,该lambda使用在连接时捕获的额外参数调用函数。像这样:
connect(combobox, &QComboBox::currentTextChanged, [x, y, this](const QString& text){ this->update(text, x, y); });
然后调用更新函数,并在建立连接时捕获x
和y
值以及源自信号的text
参数。
答案 1 :(得分:0)
您可以向插槽询问发件人()
QObject * QObject :: sender()const
如果在a中调用,则返回指向发送信号的对象的指针 由信号激活的插槽;否则它返回0.指针是 仅在执行调用此插槽的插槽期间有效 函数来自此对象的线程上下文。
答案 2 :(得分:0)
您可以使用 QSignalMapper 。 在此,您使用mapper将每个项目映射到任何特定字符串。现在,当任何映射项目发出信号时,您可以知道字符串发出的项目。
如上所述,您可以使用相同的微小更改,例如使用信号' currentTextChanged '。但是通过使用' currentIndexChanged '信号进行一些修改可以获得相同的结果。
signalMapper = new QSignalMapper(this);
for (int i = 0; i < 2; ++i) {
QComboBox *combo = new QComboBox();
connect(combo, SIGNAL(currentIndexChanged()), signalMapper, SLOT(map()));
signalMapper->setMapping(combo, "combo" + i);
}
connect(signalMapper, SIGNAL(mapped(QString)),
this, SIGNAL(indexChanged(QString)));
注意:(来源Qt助手)
QSignalMapper类收集一组无参数信号,和 使用相应的整数,字符串或窗口小部件参数重新发出它们 到发送信号的对象