Tôi sẽ giữ mã đơn giản để các bạn có thể thấy những gì tôi đang cố gắng làm;) Tôi biết tất cả các vấn đề về khóa, v.v. để tìm ra cách các tín hiệu và khe phát cùng chủ đề.Sử dụng Qt nơi chuỗi công nhân tạo các phần tử GUI mới
Trong main.cpp:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyConsole c; // Subclasses QThread and implements run()
MyReceiver r(app); // We pass app to MyReceiver for later (see below)
QObject::connect(&c, SIGNAL(sendit()),
&r, SLOT(gotit()));
c.start(); // Start the worker thread
app.exec();
}
Giả sử rằng các tín hiệu và khe cắm được thiết lập đúng trong các tập tin tiêu đề (tôi đã thử nghiệm và họ). Bây giờ, đây là vấn đề:
Trong MyReceiver.cpp:
void MyReceiver::gotit()
{
QLabel *label = new QLabel(0, "Hello"); // Some GUI element, any will do
app.setMainWidget(*label); // Some GUI action, any will do
}
Câu hỏi đặt ra là: Vì đối tượng MyReceiver đã được tạo ra trong main(), mà là trên các chủ đề chính, điều đó có nghĩa rằng các khe (ví dụ, gotit()) sẽ chạy trên thread chính và do đó an toàn để làm công cụ GUI? Ngay cả trong trường hợp tín hiệu được nâng lên từ một QThread khác (như MyConsole trong ví dụ này)?
Có cách nào tốt hơn để cho phép chuỗi công nhân tương tác với GUI (ví dụ: Obj-C/Cocoa có phương thức "gửi thư trên chuỗi chính"). "Cách Qt" của việc này là gì?
Cảm ơn trước!
http://stackoverflow.com/questions/638251/how-to-emit-cross-thread-signal-in-qt có trả lời cho bạn câu hỏi không? –