qt - 将多个信号连接到 Qt 中的单个插槽

标签 qt signals-slots qtextedit qlineedit

我正在尝试跟踪少数 QTextEdit 的 textChanged() 信号。无论文本编辑发出信号如何,我都想做同样的事情:如果 QListWidget 变空,则取消选中其关联的复选框,否则将其保留为选中状态。我的功能如下:

void MainWindow::changed()
{
    QString tempStr = ui->hNMRedit->toPlainText();
    if(tempStr != "")
    {
       ui->checkList->item(0)->setCheckState(Qt::Checked);
    }
    else
    {
       ui->checkList->item(0)->setCheckState(Qt::Unchecked);
    }
}

使用当前的方法,我必须为每个 QTextEdit 创建一个这样的函数;每个函数都包含几乎相同的代码。如果我将每个文本编辑存储在一个数组中(这样我就可以在 QListWidget 中找到它们的关联索引),我是否可以拥有这样的插槽?

void MainWindow::changed(QWidget *sender)   // for whichever text edit emits the
                                            // textChanged() signal
{
    QString tempStr = sender->toPlainText();
    if(tempStr != "")
    {
       // I would potentially use some sort of indexOf(sender) function on the array I 
       // mentioned earlier here... a little new to Qt, sorry
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Checked);
    }
    else
    {
       // same as above...
       ui->checkList->item(array.indexOf(sender))->setCheckState(Qt::Unchecked);
    }
}

这可能吗,还是我应该为每个文本编辑创建一个单独的插槽? 如果需要进一步说明,请告诉我!

最后,我觉得 QLineEdits 和 QTextEdits 之间唯一有意义的区别是默认大小。为了保持事物的一致性,我应该在整个 UI 中只使用这些对象之一吗?

谢谢!!!

最佳答案

我认为您忽略了插槽和信号的要点。您如何建立联系? 当任何文本框发生更改时,您是否尝试选中某个框?如果是这样,请使用 QSignalMapper映射 textChanged() 信号以发送 true 值并将其连接到 QCheckBox setChecked(bool) 插槽。

如果这太复杂,子类 QCheckBox 并创建一组函数 checkBox() uncheckBox() 这样您就可以在没有变量的情况下切换状态。然后将 QTextEdit textChanged() 连接到您的子类 checkBox()

如果这不是您想要的,至少要子类 QTextEdit 接受一个 QCheckBox,当文本更改时它可以更改,而不是为每个 QTextEdit 重复代码

关于qt - 将多个信号连接到 Qt 中的单个插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169487/

相关文章:

c++ - 在系统级别监听关键事件

qt - Nvidia 驱动程序更新后无法在 Qt 5.3 上编译 GLSL 着色器

c++ - 如何从 QTreeView 中的项目获取索引

c++ - 无法从指向基类的指针转换为指向派生类的指针

python - Qt/PyQt : How do I create a drop down widget, 比如QLabel、QTextBrowser等?

python - PyQt5:如何将 QPushButton 连接到插槽?

python - 使用 QThread 时启动 QTimer 时出现问题

python - QTextEdit 在调整大小时不显示水平滚动条

c++ - 如何在没有选择的情况下更改 QTextEdit 中的当前行格式?

c++ - 将 QTextEdit 对象添加到 QMainWindow