如何从组合盒发出信号
How to emit a signal from a combo Box
我有一个插槽,我可以在其中创建一个组合框并添加项目,但是每当用户选择项目时,我都会向UI管理器发出信号。我想知道是否有办法使用关键字 emit?
我不能在这里使用连接,因为我无法为 UI 管理器创建对象。 不确定我是否有意义,或者我正在解决我的问题。
void Test::dropDown(){
comboBox = new QComboBox(this);
comboBox->addItem("Test 1");
comboBox->addItem("Test 2");
comboBox->addItem("Test 3");
comboBox->showPopup();
//connect(comboBox, QOverload<int>::of(&QComboBox::activated), )
//I want to emit the activated item using the keyword "emit" and not connect
emit
}
你可以做一个信号链连接两个信号,而不是一个信号和一个插槽,没有理由自己发射信号。
给你的Test
班一个这样的信号:
signals:
void comboBoxActivated(int index);
创建组合框时:
comboBox = new QComboBox(this);
connect(comboBox, QOverload<int>::of(&QComboBox::activated), this, &Test::comboBoxActivated);
现在给你的 UI 管理器类一个槽来接收activated
信号:
private slots:
void testComboBoxActivated(int index);
现在,如果您在 UI 管理器类中有一个Test
实例,例如
Test * test = new Test();
将其信号连接到管理中心插槽:
connect(test, &Test::comboBoxActivated, this, &UIManager::testComboBoxActivated);
这样,组合将首先发出信号,该信号将由Test
类转发,最后由UI管理器插槽接收。
如果我理解得很好,您需要在单击QComboBox
项时emit
信号; 为此,您需要将激活的信号连接到发射,也许使用 lambda 函数:
connect(comboBox, &QComboBox::activated, this, [this](int index)
{
// Here emit your signal for the item at index `index`
});
相关文章:
- Qt VTK交互风格的信号到小部件
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 线程之间的布尔停止信号
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 如何从组合盒发出信号
- 将组合框信号连接到 Qt 中的 std::function 时出现问题
- 无法将 QML 组合框信号连接到插槽C++