C++/Qt工作笔记-static_cast在connect函数中的运用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82752685

connect使用函数指针,带参数的时候优先考虑使用static_cast

栗子一:

运行截图如下:

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QProcess>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();
    void getProcessStatus(int exitCode,QProcess::ExitStatus exitStatus);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QEvent>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    QProcess p;
    QString cmdString="E:\\vs2012\\QtTestDemo\\Debug\\QtTestDemo.exe";
    p.start("cmd",QStringList()<<"/c"<<cmdString);
    QEventLoop loop;
    //connect(&p,static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished),this,&Widget::getProcessStatus);
    connect(&p,static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished),[=](int exitCode,QProcess::ExitStatus exitStatus){
       qDebug()<<"exitCode:"<<exitCode;
       qDebug()<<"QProcess::ExitStatus:"<<exitStatus;
    });
    connect(&p,SIGNAL(finished(int,QProcess::ExitStatus)),&loop,SLOT(quit()));
    loop.exec();
    QString getStr=QString(p.readAllStandardOutput());
    QMessageBox::information(this,"提示",getStr);
}

void Widget::getProcessStatus(int exitCode, QProcess::ExitStatus exitStatus)
{
    qDebug()<<"exitCode:"<<exitCode;
    qDebug()<<"exitStatus:"<<exitStatus;
}

栗子二

运行截图如下:

源码如下:

qtconnectdemo.h

#ifndef QTCONNECTDEMO_H
#define QTCONNECTDEMO_H

#include <QtWidgets/QWidget>
#include "ui_qtconnectdemo.h"

class QtConnectDemo : public QWidget
{
	Q_OBJECT

public:
	QtConnectDemo(QWidget *parent = 0);
	~QtConnectDemo();

public slots:
	//void btnClicked();
	void btnClicked(bool checked);

private:
	Ui::QtConnectDemoClass ui;
};

#endif // QTCONNECTDEMO_H

mian.cpp

#include "qtconnectdemo.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QtConnectDemo w;
	w.show();
	return a.exec();
}

qtconnectdemo.cpp

#include "qtconnectdemo.h"
#include "ui_qtconnectdemo.h"
#include <QDebug>


QtConnectDemo::QtConnectDemo(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	//connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(btnClicked()));
	//connect(ui.pushButton,&QPushButton::clicked,this,&QtConnectDemo::btnClicked);
	//connect(ui.pushButton,&QPushButton::clicked,this,&QtConnectDemo::btnClicked);

	connect(ui.pushButton,static_cast<void(QPushButton::*)(bool)>(&QPushButton::clicked),[=](bool status){
		qDebug()<<status;
	});
}

QtConnectDemo::~QtConnectDemo()
{

}

//void QtConnectDemo::btnClicked()
//{
//	qDebug()<<"btnClicked() called!";
//}

void QtConnectDemo::btnClicked(bool checked)
{
	qDebug()<<"checked status:"<<checked;
	qDebug()<<"btnClicked(bool checked) called!";
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/82752685
今日推荐