MyMainWindow::MyMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMainWindow)
{
manger = new QNetworkAccessManager(this);
connect(manger, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *)));
manger->get(QNetworkRequest(QUrl("http://blog.csdn.net/lankin2013/article/details/41855013")));
//manger1 = new QNetworkAccessManager(this);
ui->setupUi(this);
ui->progressBar->hide();
}
这是一段很普通的代码,是我尝试Qt的http下载代码中遇到的一个小问题,其实以前也遇到过,不过后来不以为意就忽略掉了。现在就记录下来,以防以后犯错。
错误:我最开始把ui->setupUi(this)和ui->progressBar->hide()这两句话写的时候换了个位置,然后程序异常了。
解决方法:全部注释逐句检查,以为是其他地方写错了。后来看到因为这句出了问题,想了一下,意识到了问题。
Qt下的异常结束有几种情况(写项目总结的):(1)添加三方库时只添加了静态库,而程序运行时缺少动态库,所以手动将dll文件添加进程序目录
(2)变量未初始化或在使用前就已经析构掉了,换句话说就是访问你无权访问的空间,linux下常称为段错误。
回归到这个问题,思考ui->setupUi(this)的作用,可以点开这个文件,看到QProgressBar *progressBar;progressBar = new QProgressBar(centralWidget);也就是你在progressBar这个变量还不存在时就去设置它的属性,当然会引起异常。
Tips:ui下的控件设置其属性时请务必写在ui->setupUi(this)之后