小编Elo*_*lin的帖子

当在错误槽中启动事件循环时发生ContentNotFoundError时,QNetworkReply会发出两次错误信号

我使用QtSDK 4.7.3

我在(void test())中这样做:

mgr = new QNetworkAccessManager();
reply = mgr->get(QNetworkRequest(QUrl("http://developer.qt.nokia.com/fileNotExisting.txt")));

connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
    SLOT(onError(QNetworkReply::NetworkError)), Qt::ConnectionType::UniqueConnection);
Run Code Online (Sandbox Code Playgroud)

当然,调用插槽onError:

if (networkError == QNetworkReply::NetworkError::ContentNotFoundError)
{
// Messagebox starts an event loop which
// causes this slot to be called again
QMessageBox m;
m.exec();
}
Run Code Online (Sandbox Code Playgroud)

如果我在onError插槽中没有messagebox/eventloop,则没有崩溃,一切正常.但是当它存在时,调用m.exec()时会再次调用onError槽.当两个消息框都关闭并且我将函数保留为onError时,应用程序崩溃.发生这种情况时,应用程序会尝试删除/释放内存.错误"访问冲突读取位置"没有任何帮助,调用堆栈深入到Qt dll.

我检查了什么:
信号没有连接两次.
尝试在QApplication调用它的exec函数之前和之后调用test().(没关系).
像HostNotFound这样的另一个错误不会两次调用onError插槽.
我的所有代码都在主线程中执行.
尝试断开onError插槽,因此只调用一次,但它仍然崩溃.
试图在onError()中对请求进行中止调用.
在Qt论坛(帖子)上发表了同样的问题.

任何人都可以帮我弄清楚这里发生了什么?

这是我用于测试的代码:main.cpp

#include "contentnotfound.h"
#include <QtGui/QApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

ContentNotFound cnf;

// false: start test after application's event loop have …
Run Code Online (Sandbox Code Playgroud)

c++ qt runtime-error event-loop qnetworkaccessmanager

5
推荐指数
1
解决办法
2361
查看次数

iOS滚动视图禁用自动滚动到顶部

我是iOS开发的新手,所以对于某些人来说这可能是一个简单的问题。我正在创建一个scrollview(尝试了不同的方法,UIScrollView,UITableView,UITableViewController),每次向下滚动时,它都会自动滚动回到顶部。为什么会这样?

我知道“ scrollsToTop”正在听一些滚动到顶部的问题,但是设置为NO,所以不应该这样。已测试“ pagingEnabled”为是和否,但没有影响。

试图实现UITableViewDelegate并重写scrollViewShouldSrollToTop函数并返回NO,但是即使将其设置为tableView的委托,也不会调用该函数。

@interface Scroller : NSObject<UITableViewDelegate>

@implementation
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView )scrollView {return NO;}

// Did finish launching application
tableView = [[UITableView alloc] initWithFrame:tableRect style:UITableViewStyleGrouped];
self->tableView.pagingEnabled = NO;
tableView.scrollsToTop = NO;
[tableView setScrollsToTop:NO]; 
static Scroller s = [[Scroller alloc] init];
tableView.delegate = s;
Run Code Online (Sandbox Code Playgroud)

不要介意格式。一团糟。tableView属于应用程序委托,并在..didFinishLaunchingWithOptions:...函数中调用。我在Scroller函数“ scrollViewShouldScrollToTop”中有一个断点,但从未被击中。

objective-c uiscrollview ios

3
推荐指数
1
解决办法
7570
查看次数