के बारे में सवाल app है । चलाना() और पाशन में क्यूटी

0

सवाल

नहीं है app.exec() एक अनंत लूप है कि रिटर्न main() ?

मैं पाश के लिए चाहते हैं के सर्वर क्लाइंट संचार के नीचे, लेकिन यह बस लोगों को मार डाला और फिर मुख्य समारोह के साथ समाप्त होता है app.exec()

मैं नया हूँ, दोनों के लिए और क्यूटी सी++, कैसे कर सकते हैं मैं इस का प्रबंधन पाशन?

int main(int argc, char *argv[])
{
    cout << "Waiting for the next request " << endl;
    QApplication app(argc, argv);

    //  Prepare our context and socket
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REP);
    socket.bind("tcp://*:2424");
    zmq::message_t request;


    QQmlApplicationEngine engine;

    VideoStreamer videoStreamer;
    imageProvider *liveOriginalImageProvider(new imageProvider);
    imageProvider *liveMaskedImageProvider(new imageProvider);

    //********SERVER CLIENT COMMUNICATION BEGINS******//

    // Wait for next request from client
    cout << "Waiting for the next request ." << endl;
    socket.recv(&request);
    cout << "Waiting for the next request.. " << endl;
    string replyMessage = string(static_cast<char *>(request.data()), request.size());

    // Print out received message
    cout << "Received from client (Python): " + replyMessage << endl;

    //  See the gradual sending/replying from client
    sleep(1);

    //  Send reply back to client
    string msgToClient("W");
    zmq::message_t reply(msgToClient.size());
    memcpy((void *) reply.data(), (msgToClient.c_str()), msgToClient.size());
    socket.send(reply);

    //*********SERVER CLIENT COMMUNICATION ENDS**********//

    engine.rootContext()->setContextProperty("VideoStreamer",&videoStreamer);
    engine.rootContext()->setContextProperty("liveOriginalImageProvider",liveOriginalImageProvider);
    engine.rootContext()->setContextProperty("liveMaskedImageProvider",liveMaskedImageProvider);

    engine.addImageProvider("liveOriginal",liveOriginalImageProvider);
    engine.addImageProvider("liveMasked",liveMaskedImageProvider);


    const QUrl url(QStringLiteral("qrc:/main.qml"));
    engine.load(url);

    QObject::connect(&videoStreamer,&VideoStreamer::originalImage,liveOriginalImageProvider,&imageProvider::updateImage);
    QObject::connect(&videoStreamer,&VideoStreamer::maskedImage,liveMaskedImageProvider,&imageProvider::updateImage);

    return app.exec();
}

---------अद्यतन---------

मैं बनाया इस धागे में धागा । ज

class MyThread : public QThread{
public slots:
    void run();
};

में thread.cpp मैं घोषित विधि:

void MyThread :: run() {
    //  Prepare our context and socket
    zmq::context_t context(1);
    zmq::socket_t socket(context, ZMQ_REP);
    socket.bind("tcp://*:2424");
    zmq::message_t request;

    //********SERVER CLIENT COMMUNICATION BEGINS******//

    // Wait for next request from client
    cout << "Waiting for the next request ." << endl;
    socket.recv(&request);
    cout << "Waiting for the next request.. " << endl;
    string replyMessage = string(static_cast<char *>(request.data()), request.size());

    // Print out received message
    cout << "Received from client (Python): " + replyMessage << endl;

    //  See the gradual sending/replying from client
    sleep(1);

    //  Send reply back to client
    string msgToClient("W");
    zmq::message_t reply(msgToClient.size());
    memcpy((void *) reply.data(), (msgToClient.c_str()), msgToClient.size());
    socket.send(reply);

    exec();
    //*********SERVER CLIENT COMMUNICATION ENDS**********//
}

में main.cpp मैं यह कहा जाता है:

QThread *thread = new QThread();

MyThread *myThread = new MyThread();
myThread->moveToThread(thread);
myThread->connect(thread, SIGNAL(started()), myThread, SLOT(run()));

thread->start();

मैं Error: Class declaration lacks Q_OBJECT macro. नहीं QThread वारिस QObject? कैसे कर सकते हैं मैं फोन पाश ठीक से?

c++ qt
2021-11-23 09:48:10
1

सबसे अच्छा जवाब

0

एक मुख्य परियोजनाओं मैं काम पर अभी क्यूटी का उपयोग करता है और ZMQ - अपनी ZMQ कुर्सियां की जरूरत है अंदर रहने के लिए एक QObject पर चलाता है कि आवेदन की घटना पाश, नहीं के अंदर main() समारोह में अपने आवेदन के

यहाँ एक बहुत ही संक्षिप्त देखने के कैसे एक हमारे ZMQ कुर्सियां वालों पर क्यूटी घटना पाश - app एक ZMQ_SUB सॉकेट करने के लिए जुड़ा हुआ एक ZMQ_PUB सॉकेट दूसरे छोर पर घटनाओं के प्रकाशन से एक हार्डवेयर इंटरफेस

int main(int argc, char* argv[])
{
   QApplication app(argc, argv);
   ...
   ConnectionManager connMgr; // Create connection class - is a QObject subclass
   connMgr.connect(target);

   MainWindow mainWin; // Create GUI classes

   return app.exec();
}
void ConnectionManager::connect(std::string target)
{
    context = zmq_ctx_new();

    zsocket = zmq_socket(context, ZMQ_SUB);
    zmq_connect(zsocket, (connection + ":" + REQUEST_PORT).c_str());
    ...

    QTimer pollTimer;
    pollTimer.callOnTimeout(this, &ConnectionManager::onPollTimer);
    pollTimer.start(100);
}

void ConnectionManager::onPollTimer()
{
    uint16_t length = 0;

    const size_t buffer_length = 1024;
    uint8_t* buffer = new uint8_t[buffer_length];

    do
    {
        int64_t more = 0;
        size_t more_size = sizeof more;
        auto len = zmq_recv(zsocket, buffer + length, buffer_length - length, ZMQ_NOBLOCK);
        if (len == -1)
        {
            return;
        }
        else if (len > 0)
        {
            length += len;
            auto rc = zmq_getsockopt(socket, ZMQ_RCVMORE, &more, &more_size);
        }
    } while (more);

    std::cout << "Received" << length << "bytes";
    HandleMessage(buffer, length); // Process the incoming message
}

संक्षेप में, app.exec() करता है बनाने के लिए एक अनंत लूप है, लेकिन है कि पाश के भीतर मौजूद है QApplication वस्तु, एक नहीं है कि बस बार-बार चलाता है main() समारोह में जहां यह कहा जाता था, और एक का उपयोग करने के लिए कि पाश अपने आवेदन करना चाहिए बनाने के अतिरिक्त उदाहरण QObject उपवर्गों का उपयोग करें और संकेत/स्लॉट/QEvent/QTimer तंत्र में कार्रवाई करने के लिए प्रतिक्रिया करने के लिए उपयोगकर्ता कार्यों इनपुट/घटनाओं/समय के अंतराल

2021-11-23 18:47:50

धन्यवाद आप विवरण के लिए, लेकिन यह वास्तव में मुश्किल है मेरे लिए लागू करने के लिए. जाने के लिए संभव है इस स्थिति के माध्यम से कोड का उपयोग कर मैं ऊपर लिखा था?
noobie

अपने प्रश्न में आप ने कहा, "मैं नया हूँ करने के लिए दोनों Qt और C++" - कर रहे हैं आप नई प्रोग्रामिंग करने के लिए सामान्य रूप में या आप अन्य भाषाओं में लिखा है और आप अभी कर रहे हैं की कोशिश कर रहा में कुछ सी++/क्यूटी के लिए पहली बार? मैं पूछना क्या है, क्योंकि आप प्रयास कर रहे हैं यहाँ कुछ नहीं है, मैं सुझा होगा लागू करने की कोशिश कर के रूप में एक शुरुआत प्रोग्रामर जब तक आप मिल गया है के साथ और अधिक परिचित भाषा में सामान्य है, और फिर खुद को परिचित के साथ कैसे क्यूटी आवेदन घटना पाश और संकेत/स्लॉट तंत्र का काम है, के रूप में इन मौलिक तंत्र के लिए लेखन क्यूटी अनुप्रयोगों में सामान्य
rdowell

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में