c++ - 当对话框中的任何小部件发出信号时,是否可以调用插槽?

标签 c++ qt qt5 qcombobox

我正在尝试为应用程序创建一个配置菜单框,并使用 QDialog 框来显示用户可以更改的选项。此框包含 QComboBoxes 和 QLineEdits,但数量很多(7 个组合框和 12 个行编辑)。底部有一个名为“应用更改”的 QPushButton,仅当框中的任何属性发生更改时才应启用。

我是否必须将来自每个小部件的每个信号链接到一个插槽以单独启用按钮,或者当其组成小部件发生变化时 QDialog 框本身是否发出信号?

现在我有这个:

connect(Combo1,SIGNAL(activated(QString)),this,SLOT(fnEnable(QString)));
connect(Combo2,SIGNAL(activated(QString)),this,SLOT(fnEnable(QString)))

后面还有 17 行这些连接。

void MyClass::fnEnable(QString)
{
ApplyButton->setEnabled(true); //It is initialised as false
}

我想知道是否有更短的方法来做到这一点,也许(就像我之前提到的)QDialog 发出的信号(我在 documentation 中找不到)

我知道这不会加快程序速度,因为只调用所需的连接,但它会进一步尝试使更雄心勃勃的对话框变得更容易。

最佳答案

实际上并没有这样的信号,但是一种方法是创建一个QComboBox的列表,然后用for建立连接,例如:

QList <*QCombobox> l; 

l<<combobox1<< combobox2<< ....; 

for (auto combo: l) {
    connect(combo, &QComboBox::activated, this, &MyClass::fnEnable);
}

QLineEdit 也是如此。

关于c++ - 当对话框中的任何小部件发出信号时,是否可以调用插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44275895/

相关文章:

C++ 文件帮助,加密和解密字符串

c++ - 在循环中异步使用 ReadDirectoryChangesW

c++ - 单个构造函数来创建具有不同数据类型的对象

python - 在导入的模块中使用外部类方法

c++ Qt/Win32 - USB 以编程方式弹出,但仍显示在 QFileSystemModel 和 GetLogicalDrives() 中

c++ - "You can' t 前向声明重载 operator&"的类?

Qt-Jambi 冗长,尤其是 QtDynamicMetaObjectPrivate

qt - 如何使用ui文件制作一个简单的小部件?

c++ - 在 Qt 中显示对话框的密码

python - QDockWidget 中小部件的错误 OpenGL 视口(viewport)