QT父子窗口之间的数据传递

1、 对话框为QWidget类

方法一:

父类:Wgt_Father
子类:Wgt_Child

父类中的按钮槽函数

void Wgt_Father::On_PushButton_Edit_Clicked()
{
	Wgt_Child* wgt = new Wgt_Child(this);
	wgt->setWindowFlag(Qt::Dialog);
	wgt->setData(data);
	wgt->show();
}

子类中的按钮槽函数

void Wgt_Child::On_PushButton_Ok_Clicked()
{
	Wgt_Father* wgt = (Wgt_Father*)parentWidget();
	wgt->setFunc(rR, r);

	close();
}
当子类中点击确定时,Wgt_Child 中的数据就会传递到 Wgt_Father 中

方法二:定义相应的信号槽(这里套用GPT代码,方法一没有用可尝试)

class Wgt_SpeedcutPlotParam : public QWidget {
    Q_OBJECT

public:
    // 构造函数、其他方法...

    void setData(const YourDataType& data) {
        // 设置数据的实现
    }

signals:
    void dataAccepted(const YourDataType& data);

private slots:
    void onOkButtonClicked() {
        // 当确定按钮被点击时,发出信号
        emit dataAccepted(m_Data);
    }

private:
    YourDataType m_Data;
    // 其他成员变量...
};

void Wgt_CreateTollStation::On_PushButton_EditSpeedcut_Clicked() {
    Wgt_SpeedcutPlotParam* wgt = new Wgt_SpeedcutPlotParam(this);
    wgt->setData(m_Data);

    // 连接信号和槽
    connect(wgt, &Wgt_SpeedcutPlotParam::dataAccepted, this, &Wgt_CreateTollStation::onDataAccepted);

    // 显示子窗口
    wgt->show();
}

void Wgt_CreateTollStation::onDataAccepted(const YourDataType& data) {
    // 处理子窗口传递过来的数据
}

2、对话框为QDialog类

使用wgt->exec() == Qt::Dialog,这里就是子窗口点击确定的时候发出的信号

父类中的按钮槽函数

void Wgt_Father::On_TableWidget_Clicked(int row, int column)
{
	m_nCurRow = ui.tableWidget->currentRow();
	Wgt_Child* wgt = new Wgt_Child(this);
	if (wgt->exec() == QDialog::Accepted)
	{
		int nImgIndex;
		wgt->getImgIndex(nImgIndex);
		//其余操作
	}
	
}

子类中的确定按钮函数

void Wgt_Child::On_PushButton_Ok_Clicked()
{
	done(Accepted);
	close();
}

void Wgt_Child::On_PushButton_Cal_Clicked()
{
	done(Rejected);
	close();
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐