//
enum Page{MYFILE, SHARE, TRANKING, TRANSFER, SWITCHUSR};
public slots:
// 按钮处理函数
void slotButtonClick(Page cur);
void slotButtonClick(QString text);
private:
QSignalMapper* m_mapper; // 声明指向 QSignalMapper 的指针,用于处理信号映射
QToolButton* m_curBtn; // 声明当前选中的按钮指针
QMap<QString, QToolButton*> m_btns; // 声明一个按钮集合,存储按钮文本与对应按钮的映射关系
QMap<Page, QString> m_pages; // 声明一个页面映射,存储页面枚举与对应文本的映射关系
// 将每个按钮的显示文本作为键,对应的按钮指针作为值插入到按钮集合中
m_btns.insert(ui->myfile->text(), ui->myfile);
m_btns.insert(ui->sharelist->text(), ui->sharelist);
m_btns.insert(ui->download->text(), ui->download);
m_btns.insert(ui->transform->text(), ui->transform);
m_btns.insert(ui->switchuser->text(), ui->switchuser);
// 将页面枚举值与对应的按钮文本插入到页面映射中
m_pages.insert(Page::MYFILE, ui->myfile->text());
m_pages.insert(Page::SHARE, ui->sharelist->text());
m_pages.insert(Page::TRANKING, ui->download->text());
m_pages.insert(Page::TRANSFER, ui->transform->text());
m_pages.insert(Page::SWITCHUSR, ui->switchuser->text());
QMap<QString, QToolButton*>::iterator it = m_btns.begin();
for(;it != m_btns.end();it++)
{
//
m_mapper->setMapping(it.value(), it.value()->text());
//
connect(it.value(),&QToolButton::clicked,[=]()
{
m_mapper->map(it.value());
});
}
connect(m_mapper,static_cast<void(QSignalMapper::*)(const QString &text)>(&QSignalMapper::mapped),this,&btngroup::slotButtonClick);//这一行出的问题,不知道该怎么该,ai说去掉静态转换,去掉以后ai又说加上静态转换
}
void btngroup::slotButtonClick(Page cur)
{
QString text = m_pages[cur];
slotButtonClick(text);
}
void btngroup::slotButtonClick(QString text);
首先建议 QOverload<const QString&>::of(&QSignalMapper::mapped),这样美观。
第二个,你槽函数参数不适配,应为 void btngroup::slotButtonClick(const QString& text);
QString 和 const QString& 不是一个类型。
除了楼上说的,另外,第二个参数是不是也要选一个. QOverload<const QString&>::of(&btngroup::slotButtonClick)
代码块的最后一行的connect,我也不知道为啥只识别那一块的代码块
– 文姬的九命猫 6天前