Tôi đang cố gắng mã một hàm gọi lại tĩnh được gọi thường xuyên từ một hàm tĩnh khác trong cùng một lớp. Hàm gọi lại của tôi cần emit
một tín hiệu nhưng vì một lý do nào đó, nó chỉ đơn giản là không làm như vậy. Tôi đã đặt nó dưới một trình gỡ lỗi và slot
không bao giờ được gọi. Tuy nhiên khi tôi đặt mã tôi sử dụng để emit
dữ liệu trong một chức năng không tĩnh nó hoạt động. Có một lý do tôi không thể phát ra một tín hiệu từ một chức năng tĩnh? Tôi đã thử khai báo một thể hiện mới của lớp và gọi hàm emit nhưng không may mắn.Gửi tín hiệu từ phương thức lớp tĩnh trong Qt
class Foo
{
signals:
emitFunction(int);
private:
static int callback(int val)
{
/* Called multiple times (100+) */
Foo *foo = new Foo;
foo.emitFunction(val);
}
void run()
{
callback(percentdownloaded);
}
};
Tôi đã đăng một số mã cơ bản thể hiện những gì tôi đang cố gắng làm. Tôi sẽ đăng mã đầy đủ theo yêu cầu.
Chỉnh sửa: Tôi đăng toàn bộ mã vì đây là loại kịch bản lạ. http://pastebin.com/6J2D2hnM
Nơi nào bạn kết nối tín hiệu và SLOT? – Nobody
Tôi kết nối chúng trong một tệp '.cpp' riêng biệt được gọi trên một nút bấm. 'void MainWindow :: on_pushButton_clicked() { tProc = new Foo (điều này); kết nối (tProc, SIGNAL (ValChanged (int)), điều này, SLOT (onNumberChanged (int))); tProc-> start(); } 'nó sau đó tạo một thể hiện mới của lớp' Foo' của tôi và bắt đầu luồng gọi hàm gọi lại. – user99545
Trong hàm gọi lại tĩnh của bạn, bạn tạo một cá thể Foo mới và gọi tín hiệu trên đó. Tôi cho rằng đây là điểm mà bạn muốn phát ra tín hiệu. Làm thế nào để bạn kết nối cá thể này với vị trí bạn muốn giải quyết? – Nobody