QPushButton::clicked和QPushButton::click有什么区别
- QPushButton::clicked是一个信号,当按钮被用户点击时发出。它可以携带一个布尔值参数,表示是否按钮被按下
- QPushButton::click是一个槽,当调用它时,会模拟按钮被点击的效果,并发出clicked信号
两个示例帮助理解
- 一个示例,演示了如何将两个按钮的clicked信号连接到同一个槽函数,并根据参数判断哪个按钮被点击
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QPushButton *button1;
QPushButton *button2;
QLabel *label;
private slots:
void onButtonClicked(bool checked);
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
button1 = new QPushButton(this);
button2 = new QPushButton(this);
label = new QLabel(this);
button1->setText("Button 1");
button2->setText("Button 2");
label->setText("No button clicked");
button1->setGeometry(100, 100, 100, 50);
button2->setGeometry(300, 100, 100, 50);
label->setGeometry(200, 200, 150, 50);
connect(button1,SIGNAL(clicked(bool)),this,SLOT(onButtonClicked(bool)));
connect(button2,SIGNAL(clicked(bool)),this,SLOT(onButtonClicked(bool)));
}
void MainWindow::onButtonClicked(bool checked)
{
if(sender() == button1) //判断发送者是哪个按钮
{
label->setText("Button 1 clicked");
}
else if(sender() == button2)
{
label->setText("Button 2 clicked");
}
}
MainWindow::~MainWindow()
{
}
- 另一个示例,演示了如何在自定义的槽函数中使用QPushButton::click来模拟按钮被点击,并弹出对话框
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
QPushButton* button;
private slots:
void on_button_clicked();
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
button = new QPushButton(this);
button->setText("Click Me");
button->setGeometry(200,200,80,40);
connect(button,SIGNAL(clicked()),this,SLOT(on_button_clicked()));
}
void MainWindow::on_button_clicked()
{
button->click(); //模拟按钮被点击
QMessageBox::information(this,"Message","You clicked the button!");
}
MainWindow::~MainWindow()
{
}