Qt C++: 同一个.cpp文件中实现两个按钮的槽函数互通 - 两种方法
在同一个.cpp文件中,可以通过以下两种方式实现两个按钮的槽函数互通。\n\n1. 使用成员变量:\n在类的定义中声明两个按钮对象的成员变量,并在构造函数中连接按钮的clicked()信号到对应的槽函数。在槽函数中可以通过判断sender()来确定是哪个按钮触发了该槽函数。\n\ncpp\nclass Widget : public QWidget\n{\n Q_OBJECT\n \npublic:\n Widget(QWidget *parent = nullptr);\n \nprivateslots:\n void onButton1Clicked();\n void onButton2Clicked();\n \nprivate:\n QPushButton *button1;\n QPushButton *button2;\n};\n\nWidget::Widget(QWidget *parent)\n : QWidget(parent)\n{\n button1 = new QPushButton("Button 1", this);\n button2 = new QPushButton("Button 2", this);\n \n connect(button1, &QPushButton::clicked, this, &Widget::onButton1Clicked);\n connect(button2, &QPushButton::clicked, this, &Widget::onButton2Clicked);\n}\n\nvoid Widget::onButton1Clicked()\n{\n if (sender() == button1)\n {\n // Button 1 clicked\n }\n else if (sender() == button2)\n {\n // Button 2 clicked\n }\n}\n\nvoid Widget::onButton2Clicked()\n{\n if (sender() == button1)\n {\n // Button 1 clicked\n }\n else if (sender() == button2)\n {\n // Button 2 clicked\n }\n}\n\n\n2. 使用Lambda表达式:\n在构造函数中连接按钮的clicked()信号到Lambda表达式,通过Lambda表达式中的参数来判断是哪个按钮触发了该槽函数。\n\ncpp\nclass Widget : public QWidget\n{\n Q_OBJECT\n \npublic:\n Widget(QWidget *parent = nullptr);\n};\n\nWidget::Widget(QWidget *parent)\n : QWidget(parent)\n{\n QPushButton *button1 = new QPushButton("Button 1", this);\n QPushButton *button2 = new QPushButton("Button 2", this);\n \n connect(button1, &QPushButton::clicked, [this](bool checked) {\n if (sender() == button1)\n {\n // Button 1 clicked\n }\n else if (sender() == button2)\n {\n // Button 2 clicked\n }\n });\n \n connect(button2, &QPushButton::clicked, [this](bool checked) {\n if (sender() == button1)\n {\n // Button 1 clicked\n }\n else if (sender() == button2)\n {\n // Button 2 clicked\n }\n });\n}\n\n\n无论使用哪种方式,都可以实现两个按钮的槽函数互通。
原文地址: https://www.cveoy.top/t/topic/qqfz 著作权归作者所有。请勿转载和采集!