一、简单介绍
在mainwindow中实例化各个页面,捕捉各个页面点击按钮事件生成用户操作日志。
二、代码实现
首先,使用findChildren<QPushButton*>()方法来查找this指针指向的Mainwindow对象下所有的按钮组件,将它们存储在QList容器中,类似分别将其他页面的按钮组件存储在不同QList容器中。
然后,创建一个QVector容器vec1,将所有QList容器添加到vec1中。使用嵌套for循环遍历vec1,首先遍历每个列表,然后按位置索引遍历每个列表中的按钮,使用connect连接点击信号与onFunc槽函数。
void MainWindow::logslot()
{
QList<QPushButton *> button = this -> findChildren<QPushButton *>();
QList<QPushButton *> button1 = mainoperator -> findChildren<QPushButton *>();
QList<QPushButton *> button2 = mainequipment -> findChildren<QPushButton *>();
QList<QPushButton *> button3 = mainsystemtest -> findChildren<QPushButton *>();
QList<QPushButton *> button4 = mainsystemmanage -> findChildren<QPushButton *>();
QList<QPushButton *> button5 = mainusermanage -> findChildren<QPushButton *>();
QVector<QList<QPushButton*>> vec1;
vec1.push_back(button);
vec1.push_back(button1);
vec1.push_back(button2);
vec1.push_back(button3);
vec1.push_back(button4);
vec1.push_back(button5);
for (int i = 0; i < vec1.size(); i++)
{
for(int j = 0; j < vec1[i].count(); j++)
{
connect(vec1[i].at(j), &QPushButton::clicked, this, &MainWindow::onFunc);
}
}
}
其次,当连接的信号被触发时,发送者会通过 sender()函数返回,该函数返回信号的发送者对象的指针。在这种情况下,由于连接的是 QPushButton 的 clicked 信号,所以 sender()
返回的是点击的按钮的指针。
void MainWindow::onFunc()
{
QPushButton *pBtn = (QPushButton *)sender();
QString name = pBtn -> text();
addnewlog(name);
}
最后,在addnewlog函数中连接数据库,根据需要加上实时时间写入数据库中。