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;
}
}