标签:窗口 queryCondition 函数 发送信息 connect SignalQueryConditionBtnClicked DatasetQueryCon
场景:点击父窗口按钮1,弹出子窗口。点击子窗口查询按钮,隐藏子窗口并把查询结果显示在父窗口上。
参考文献Qt实例–主窗口和子窗口互发信号
简化需求为:子窗口点击按钮,向父窗口发送消息,并显示在子窗口上:
子窗口 DatasetQueryConditionWgt.h
要定义两个函数:
- 点击按钮,发送信号的槽函数SlotQueryBtnClicked(),注意带上slots
- 发送信息的函数 SignalQueryConditionBtnClicked(QVariantMap m_queryCondition),注意带上signals关键字
signals:
void SignalQueryConditionBtnClicked(QVariantMap m_queryCondition);
protected slots:
void SlotQueryBtnClicked();
子窗口 DatasetQueryConditionWgt.cpp
connect(ui.queryBtn, SIGNAL(clicked()), this, SLOT(SlotQueryBtnClicked()));//在子窗口的构造函数中写connect函数
...
void DatasetQueryConditionWgt::SlotQueryBtnClicked()
{
...//其他操作
emit SignalQueryConditionBtnClicked( m_queryCondition);
}
父窗口 DataSetQueryWidget.h
申明槽函数,接受子窗口发送的信号
protected slots:
void DatasetQueryConditionWgtReceiveSignals(QVariantMap queryCondition);
父窗口 DataSetQueryWidget.cpp
connect(m_pWindow, &DatasetQueryConditionWgt::SignalQueryConditionBtnClicked, this, &DataSetQueryWidget::DatasetQueryConditionWgtReceiveSignals);
//参数分别是:子窗口实例化的对象指针,子窗口的信号函数,父窗口的对象指针,父窗口的槽函数
//一般在子窗口实例化,也就是new完之后 写connect
void DataSetQueryWidget::DatasetQueryConditionWgtReceiveSignals(QVariantMap queryCondition)
{
m_pWindow->hide();
queryCondition ···
}
坑一:
一开始我在父窗口的构造函数中写 connect,点击按钮没反应,因为构造函数运行时,子窗口还没有实例化,connect不起作用
new完之后再写就好了!!!
if(!m_pWindow)
m_pWindow = new DatasetQueryConditionWgt(this);
connect(m_pWindow, &DatasetQueryConditionWgt::SignalQueryConditionBtnClicked, this, &DataSetQueryWidget::DatasetQueryConditionWgtReceiveSignals);
坑二:
本来不打算用这个方法的,本来是打算直接在父窗口写子窗口的槽函数,但是在写connect时,发现 子窗口.ui 无法使用。这个是子窗口私有化的对象,所以connect无法奏效。
同事给了一种解决方案:在子窗口中设置getui函数获取ui,应该也可以,但是我没试。当然这个发送消息的方式也时同时告诉我的
标签:窗口,queryCondition,函数,发送信息,connect,SignalQueryConditionBtnClicked,DatasetQueryCon 来源: https://blog.csdn.net/fuyouzhiyi/article/details/120885420
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。