Qt setUserData使用事项

这篇博客介绍了如何在Qt中使用QtsetUserData()函数为按钮设置自定义数据,并通过userData()获取这些数据,以实现不同按钮事件的区分和处理。文章详细阐述了定义结构体、设置和获取数据的步骤,并给出了具体的代码示例,强调了在设置数据时避免资源冲突的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt setUserData()可以给按钮设置信息,使用userData()来获取设置信息,进而实现绑定事件,也可以用来区分点击的是哪个按钮。

一、首先定义一个结构体变量。

struct Data : QObjectUserData
{
    QString m_db_name;
    QString m_user_name;
    QString m_db_type;
    string m_db_id;
};
Q_DECLARE_METATYPE(Data)

二、为结构变量设置值//为按钮设置数据 可以通过指针也可通过变量,这里值得注意的一点是,当你要使用多次SetUserData时,需要定义相应个Data结构体进行设值,即使值是一样的,也不能使用同一个,否则在程序结束时释放资源时会造成程序的异常终止

Data * dataImport = new Data;
Data * dataDisplay = new Data;
Data  dataDelete;
dataImport->m_db_name = CMysqlUtils::GetInstance()->GetDbName(dbID);
dataImport->m_user_name = CMysqlUtils::GetInstance()->GetDbUsername(dbID);
dataImport->m_db_type = "MySQL";
dataImport->m_db_id = dbID;
dataDisplay->m_db_name = CMysqlUtils::GetInstance()->GetDbName(dbID);
dataDisplay->m_user_name = CMysqlUtils::GetInstance()->GetDbUsername(dbID);
dataDisplay->m_db_type = "MySQL";
dataDisplay->m_db_id = dbID;
dataDelete.m_db_id = dbID;
dataDelete.m_db_name = CMysqlUtils::GetInstance()->GetDbName(dbID);
dataDelete.m_user_name = CMysqlUtils::GetInstance()->GetDbUsername(dbID);
dataDelete.m_db_type = "MySQL";
dataDelete.m_db_id = dbID;

三、给按钮设置值 分为指针和变量两种

QPushButton * operation_delete = new QPushButton();
QPushButton * operation_tool= new QPushButton();
QPushButton * operation_delete= new QPushButton();
operation_manage->setUserData(Qt::UserRole, dataDisplay);
operation_tool->setUserData(Qt::UserRole, dataImport);
operation_delete->setUserData(Qt::UserRole, &dataDelete);

四、获取设置的值
void CDataBaseManageWidget::OnSqlImport()
{
    QObject * pObject = this->sender();
    QPushButton * pButton = qobject_cast<QPushButton *>(pObject);
    Data * puser = (Data *)(pButton->userData(Qt::UserRole));

    if (puser)
    {
        string dbId = puser->m_db_id;

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值