FtpManager * p = new FtpManager(this);
p->SetHost("127.0.0.1", 21);
p->SetUserName("anonymous");
p->SetPwd("");
p->SetPort(21);
ui->tableWidget->setRowCount(1);
ui->tableWidget->setColumnCount(3);
QPushButton * btn = new QPushButton();
connect(btn, &QPushButton::clicked,[&] (){
p->S_uloadFile("F://test1.zip","test1.zip",false);
});
btn->setText("开始");
ui->tableWidget->setCellWidget(0, 1, btn);
1、上面的代码老是异常中断,应该是局部变量 p 提前释放了。
解决:
使用静态局部变量。
2、里面只能执行一条语句
在
p->S_uloadFile("F://test1.zip","test1.zip",false);
前面或者后面加一条语句,都会报错
比如这样:不知道什么原因。。。
connect(btn, &QPushButton::clicked,[&, s, btn] (){
p->S_uloadFile(s,"test1.zip",false);
btn->setText("暂停");
});
解决办法:
如上图,其他变量使用值传递就不报错,不知道这是为什么
3
感觉使用静态局部变量不是长久之计啊,静态局部变量好像不能手动释放。。。
现在用来C++14里的 move可以搞定,但是感觉兼容性会有问题
如下:
connect(btn, &QPushButton::clicked, this, [=, p = std::move(p)] (){
后面没变。
原来这个方法是C++11里的,但是我不是很懂为什么这样就解决了