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

583 篇文章 127 订阅
388 篇文章 20 订阅

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!";
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值