Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QUdpSocket readyRead() is not emitted
Qt 6.12 LTS is out! See what's new in the release blog

QUdpSocket readyRead() is not emitted

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 5 Posters 8.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • dheerendraD Offline
    dheerendraD Offline
    dheerendra
    Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
    wrote on last edited by
    #2

    Can u see example[link text](link https://forum.qt.io/topic/98601/qudpsocket-simple-communication-between-2-qt-applications)here and try

    Dheerendra
    @Community Service
    Certified Qt Specialist
    https://www.pthinks.com

    1 Reply Last reply
    2
    • J Offline
      J Offline
      James Mark Chan
      wrote on last edited by
      #3

      I found my issue. Need to do the connect call and binding after the QCoreApplication a(...) is declared and then follow with the a.exec(). Apparently I was doing it after and it makes a difference.

      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
      
          u_int16_t port = 7777;
          MyUDP *myUDP = new MyUDP(0);
          myUDP->initSocket(port);
      
          return a.exec();
      }
      
      1 Reply Last reply
      0
      • dheerendraD Offline
        dheerendraD Offline
        dheerendra
        Moderators Qt Champions 2024 Qt Champions 2022 Qt Champions 2017
        wrote on last edited by
        #4

        This was the precise issue and hence requested you to look at previous post.

        Dheerendra
        @Community Service
        Certified Qt Specialist
        https://www.pthinks.com

        1 Reply Last reply
        0
        • J Offline
          J Offline
          James Mark Chan
          wrote on last edited by
          #5

          Thank you! I just happen to stumble by dumb luck across the answer as you were posting. Appreciate your time.

          1 Reply Last reply
          0
          • J Offline
            J Offline
            James Mark Chan
            wrote on last edited by
            #6

            Hi Dheerendra,

            If you have a moment for a follow up question. We have a non qmake build and I'm noticing that we get this error when I try to compile with the Q_OBJECT macro.

            obj/udp_server.o: In function `udp_server::udp_server(QObject*)':
            udp_server.cpp:(.text+0xc): undefined reference to `vtable for udp_server'
            

            Can I substitute come command line build commands and have the Q_OBJECT macro removed? Can you advise on how to inherit a class from qobject to use signal slots without needing to port our make file to a qmake pro format?

            Am I just calling moc <myfile.h>; moc <myfile.cpp> and then compiling with the two newly generated files from moc? Or is there more to it than that?

            jsulmJ 1 Reply Last reply
            0
            • J James Mark Chan

              Hi Dheerendra,

              If you have a moment for a follow up question. We have a non qmake build and I'm noticing that we get this error when I try to compile with the Q_OBJECT macro.

              obj/udp_server.o: In function `udp_server::udp_server(QObject*)':
              udp_server.cpp:(.text+0xc): undefined reference to `vtable for udp_server'
              

              Can I substitute come command line build commands and have the Q_OBJECT macro removed? Can you advise on how to inherit a class from qobject to use signal slots without needing to port our make file to a qmake pro format?

              Am I just calling moc <myfile.h>; moc <myfile.cpp> and then compiling with the two newly generated files from moc? Or is there more to it than that?

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #7

              @James-Mark-Chan Do you also compile and link generated moc_*.cpp files?
              You can do an

              #include <moc_myfile.cpp>
              

              at the end of you myfile.cpp

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              J 1 Reply Last reply
              0
              • J Offline
                J Offline
                James Mark Chan
                wrote on last edited by
                #8

                Hi, a quick update. After I added these lines
                https://stackoverflow.com/questions/54263057/processing-of-q-object-in-legacy-non-qmake-build/
                I was able to build on my system locally but when I try and build on the remote build server I am getting these errors:

                18-Jan-2019 17:42:57	In file included from udp_server.cpp:2:0:
                18-Jan-2019 17:42:57	db.h:45:2: error: ‘uint32_t’ does not name a type
                18-Jan-2019 17:42:57	  uint32_t cont_type;
                18-Jan-2019 17:42:57	  ^
                18-Jan-2019 17:42:57	db.h:46:2: error: ‘uint32_t’ does not name a type
                18-Jan-2019 17:42:57	  uint32_t valve;
                18-Jan-2019 17:42:57	  ^
                18-Jan-2019 17:42:57	db.h:47:2: error: ‘uint32_t’ does not name a type
                18-Jan-2019 17:42:57	  uint32_t head;
                18-Jan-2019 17:42:57	  ^
                18-Jan-2019 17:42:57	db.h:48:2: error: ‘uint32_t’ does not name a type
                18-Jan-2019 17:42:57	  uint32_t fill_level;
                18-Jan-2019 17:42:57	  ^
                18-Jan-2019 17:42:57	udp_server.cpp: In member function ‘void udp_server::processPendingDatagrams()’:
                18-Jan-2019 17:42:57	udp_server.cpp:53:15: error: ‘struct fms_data_t’ has no member named ‘cont_type’
                18-Jan-2019 17:42:57	           fms.cont_type = jmap["cont_type"].toInt();
                18-Jan-2019 17:42:57	               ^
                18-Jan-2019 17:42:57	udp_server.cpp:54:15: error: ‘struct fms_data_t’ has no member named ‘valve’
                18-Jan-2019 17:42:57	           fms.valve = jmap["valve"].toInt();
                18-Jan-2019 17:42:57	               ^
                18-Jan-2019 17:42:57	udp_server.cpp:55:15: error: ‘struct fms_data_t’ has no member named ‘head’
                18-Jan-2019 17:42:57	           fms.head = jmap["head"].toInt();
                18-Jan-2019 17:42:57	               ^
                18-Jan-2019 17:42:57	udp_server.cpp:56:15: error: ‘struct fms_data_t’ has no member named ‘fill_level’
                18-Jan-2019 17:42:57	           fms.fill_level = jmap["fill_level"].toInt();
                18-Jan-2019 17:42:57	               ^
                

                I was wondering what the issue could be. I'm a far more experienced java developer so am not that familiar with qt troubleshooting. The remote system is Ubuntu 16.04 with:

                QMake version 3.0
                Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu
                

                And my local development environment is ubuntu 18.04

                QMake version 3.1
                Using Qt version 5.9.5 in /usr/lib/x86_64-linux-gnu
                

                Is this because of the version mismatch? I'm not actually using qmake so the version of make on both the build server and my local workstation is:

                GNU Make 4.1
                Built for x86_64-pc-linux-gnu
                

                Any advice is really appreciated!!!

                aha_1980A 1 Reply Last reply
                0
                • J James Mark Chan

                  Hi, a quick update. After I added these lines
                  https://stackoverflow.com/questions/54263057/processing-of-q-object-in-legacy-non-qmake-build/
                  I was able to build on my system locally but when I try and build on the remote build server I am getting these errors:

                  18-Jan-2019 17:42:57	In file included from udp_server.cpp:2:0:
                  18-Jan-2019 17:42:57	db.h:45:2: error: ‘uint32_t’ does not name a type
                  18-Jan-2019 17:42:57	  uint32_t cont_type;
                  18-Jan-2019 17:42:57	  ^
                  18-Jan-2019 17:42:57	db.h:46:2: error: ‘uint32_t’ does not name a type
                  18-Jan-2019 17:42:57	  uint32_t valve;
                  18-Jan-2019 17:42:57	  ^
                  18-Jan-2019 17:42:57	db.h:47:2: error: ‘uint32_t’ does not name a type
                  18-Jan-2019 17:42:57	  uint32_t head;
                  18-Jan-2019 17:42:57	  ^
                  18-Jan-2019 17:42:57	db.h:48:2: error: ‘uint32_t’ does not name a type
                  18-Jan-2019 17:42:57	  uint32_t fill_level;
                  18-Jan-2019 17:42:57	  ^
                  18-Jan-2019 17:42:57	udp_server.cpp: In member function ‘void udp_server::processPendingDatagrams()’:
                  18-Jan-2019 17:42:57	udp_server.cpp:53:15: error: ‘struct fms_data_t’ has no member named ‘cont_type’
                  18-Jan-2019 17:42:57	           fms.cont_type = jmap["cont_type"].toInt();
                  18-Jan-2019 17:42:57	               ^
                  18-Jan-2019 17:42:57	udp_server.cpp:54:15: error: ‘struct fms_data_t’ has no member named ‘valve’
                  18-Jan-2019 17:42:57	           fms.valve = jmap["valve"].toInt();
                  18-Jan-2019 17:42:57	               ^
                  18-Jan-2019 17:42:57	udp_server.cpp:55:15: error: ‘struct fms_data_t’ has no member named ‘head’
                  18-Jan-2019 17:42:57	           fms.head = jmap["head"].toInt();
                  18-Jan-2019 17:42:57	               ^
                  18-Jan-2019 17:42:57	udp_server.cpp:56:15: error: ‘struct fms_data_t’ has no member named ‘fill_level’
                  18-Jan-2019 17:42:57	           fms.fill_level = jmap["fill_level"].toInt();
                  18-Jan-2019 17:42:57	               ^
                  

                  I was wondering what the issue could be. I'm a far more experienced java developer so am not that familiar with qt troubleshooting. The remote system is Ubuntu 16.04 with:

                  QMake version 3.0
                  Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu
                  

                  And my local development environment is ubuntu 18.04

                  QMake version 3.1
                  Using Qt version 5.9.5 in /usr/lib/x86_64-linux-gnu
                  

                  Is this because of the version mismatch? I'm not actually using qmake so the version of make on both the build server and my local workstation is:

                  GNU Make 4.1
                  Built for x86_64-pc-linux-gnu
                  

                  Any advice is really appreciated!!!

                  aha_1980A Offline
                  aha_1980A Offline
                  aha_1980
                  Lifetime Qt Champion
                  wrote on last edited by aha_1980
                  #9

                  @James-Mark-Chan uint32_t is in stdint.h. you probably miss an include which on your system is implicitely given.

                  Qt has to stay free or it will die.

                  jsulmJ 1 Reply Last reply
                  0
                  • aha_1980A aha_1980

                    @James-Mark-Chan uint32_t is in stdint.h. you probably miss an include which on your system is implicitely given.

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    @aha_1980 @James-Mark-Chan Since C++11 it is <cstdint>
                    https://en.cppreference.com/w/cpp/types/integer

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    aha_1980A 1 Reply Last reply
                    2
                    • jsulmJ jsulm

                      @aha_1980 @James-Mark-Chan Since C++11 it is <cstdint>
                      https://en.cppreference.com/w/cpp/types/integer

                      aha_1980A Offline
                      aha_1980A Offline
                      aha_1980
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      @jsulm You're right. I'm just coding too much in C ;)

                      Qt has to stay free or it will die.

                      JonBJ 1 Reply Last reply
                      0
                      • aha_1980A aha_1980

                        @jsulm You're right. I'm just coding too much in C ;)

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #12

                        @aha_1980 If you're still coding in C rather than C++, can you give me a job, please ;-)

                        aha_1980A 1 Reply Last reply
                        0
                        • JonBJ JonB

                          @aha_1980 If you're still coding in C rather than C++, can you give me a job, please ;-)

                          aha_1980A Offline
                          aha_1980A Offline
                          aha_1980
                          Lifetime Qt Champion
                          wrote on last edited by aha_1980
                          #13

                          @JonB

                          If you can handle 12 kB RAM (no dynamic allocation!) and 128 kB Flash... ;)

                          Qt has to stay free or it will die.

                          JonBJ 1 Reply Last reply
                          0
                          • aha_1980A aha_1980

                            @JonB

                            If you can handle 12 kB RAM (no dynamic allocation!) and 128 kB Flash... ;)

                            JonBJ Offline
                            JonBJ Offline
                            JonB
                            wrote on last edited by JonB
                            #14

                            @aha_1980 Sounds excellent --- I started on 1K RAM, no flash mem, and a cassette recorder.... :)

                            1 Reply Last reply
                            1
                            • jsulmJ jsulm

                              @James-Mark-Chan Do you also compile and link generated moc_*.cpp files?
                              You can do an

                              #include <moc_myfile.cpp>
                              

                              at the end of you myfile.cpp

                              J Offline
                              J Offline
                              James Mark Chan
                              wrote on last edited by
                              #15

                              @jsulm I'm curious if added:

                              #include <moc_myfile.cpp>
                              

                              Is the benefit that I don't need to compile an independent moc_myfile.o or would that step still be necessary?

                              1 Reply Last reply
                              0
                              • J Offline
                                J Offline
                                James Mark Chan
                                wrote on last edited by
                                #16

                                It seems that another solution could be to do an install of the 5.9 or 5.12 into the target environment. This environment does not have a desktop, does anyone know if the silent installer feature works now? I was thinking of using:

                                sudo ./qt-opensource-linux-x64-5.12.0.run --platform minimal
                                

                                Will that work or is the script command also necessary?

                                aha_1980A 1 Reply Last reply
                                0
                                • J James Mark Chan

                                  It seems that another solution could be to do an install of the 5.9 or 5.12 into the target environment. This environment does not have a desktop, does anyone know if the silent installer feature works now? I was thinking of using:

                                  sudo ./qt-opensource-linux-x64-5.12.0.run --platform minimal
                                  

                                  Will that work or is the script command also necessary?

                                  aha_1980A Offline
                                  aha_1980A Offline
                                  aha_1980
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #17

                                  @James-Mark-Chan

                                  The correct solution is to fix your code. Your build server already told you, that the code is relying on external includes to compile. Now you want to fix this by changing the external includes?!

                                  This problem can come back anytime. Better fix it now.

                                  Qt has to stay free or it will die.

                                  1 Reply Last reply
                                  1
                                  • J Offline
                                    J Offline
                                    James Mark Chan
                                    wrote on last edited by James Mark Chan
                                    #18

                                    @aha_1980 Thanks for the encouragement. I got this to build last evening by adding:

                                    #include <stdint.h>
                                    

                                    to our db.h file. I'm not sure if that was the correct solution or if there was something wrong with the make file. Here is the make file for reference:

                                    
                                    MAJOR_VER=1
                                    MINOR_VER=0
                                    PATCH_VER=0
                                    
                                    DEB_MAINTAINER=
                                    
                                    ####### Sets include paths
                                    FILTEC_BUILD="no"
                                    
                                    ####### Enable/Disable DEBUG build with "yes" or "no"
                                    DEBUG="no"
                                    
                                    APP_BASE_NAME=historian
                                    
                                    BUILD_FILE = build.cpp
                                    
                                    SRCPP =	main.cpp db.cpp syslog.cpp log.cpp common.cpp pid.cpp $(BUILD_FILE)
                                    SRCPP += mqtt_sub.cpp ve_util.cpp ve_mqtt.cpp udp_server.cpp moc_udp_server.cpp
                                    
                                    OBJDIR = ./obj
                                    BINDIR = ./bin
                                    RELDIR = ../release
                                    MAKEOBJDIR := $(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR) ; fi )
                                    MAKEBINDIR := $(shell if [ ! -d $(BINDIR) ]; then mkdir $(BINDIR) ; fi )
                                    MAKERELDIR := $(shell if [ ! -d $(RELDIR) ]; then mkdir $(RELDIR) ; fi )
                                    
                                    APPNAME	= $(BINDIR)/$(APP_BASE_NAME)
                                    
                                    OBJ = $(SRCPP:%.cpp=$(OBJDIR)/%.o)
                                    
                                    ifeq ($(FILTEC_BUILD),"yes")
                                    QTPATH        = /home/filtec/Qt5.2.1/5.2.1/gcc_64
                                    QTINCPATH     = $(QTPATH)/include
                                    else
                                    QTPATH        = /usr/include
                                    QTINCPATH     = $(QTPATH)/x86_64-linux-gnu/qt5
                                    endif
                                    
                                    #######################################
                                    
                                    INCLUDEPATH := -I./ -I$(QTINCPATH) -I$(QTINCPATH)/QtCore -I$(QTINCPATH)/QtNetwork -Ithirdparty/mosquitto/include -Ithirdparty/sqlite3/include
                                    
                                    CFLAGS = -Wall -Wno-trigraphs -pipe -fno-strict-aliasing -fno-common -fshort-enums
                                    CFLAGS += $(INCLUDEPATH) -fPIC
                                    CFLAGS += -Wformat-security
                                    CFLAGS += -DLINUX
                                    CFLAGS += -DMAJOR_VERSION=$(MAJOR_VER)
                                    CFLAGS += -DMINOR_VERSION=$(MINOR_VER)
                                    CFLAGS += -DPATCH_VERSION=$(PATCH_VER)
                                    
                                    LDLIBS = -lpthread -lQt5Core -lQt5Network
                                    
                                    LDLIBS += -lsqlite3
                                    LDLIBS += -lmosquitto
                                    
                                    
                                    ifeq (.version,$(wildcard .version))
                                    BUILD_TMP := $(shell eval expr 0`cat .version` + 1 > .version)
                                    else
                                    BUILD_TMP := $(shell echo 0 > .version)
                                    endif
                                    BUILD_NUMBER := $(shell cat .version)
                                    BUILD_DEB := $(shell eval expr 0`cat .version` + 1)
                                    
                                    ifeq ($(DEBUG),"yes")
                                    CFLAGS += -O1
                                    CFLAGS += -g -rdynamic -DDEBUG
                                    DBG_SUFFIX=-dbg
                                    else
                                    CFLAGS += -O3
                                    endif
                                    
                                    CC=g++
                                    NM = $(CROSS)nm
                                    STRIP = $(CROSS)strip
                                    STRIPFLAGS = --strip-all --remove-section=.note --remove-section=.comment
                                    
                                    #######################################
                                    
                                    # FIL-3131 adding patch number to distinguish it from build number
                                    #BASENAME = $(APPNAME)-$(MAJOR_VER).$(MINOR_VER).$(BUILD_NUMBER)$(DBG_SUFFIX)
                                    BASENAME = $(APPNAME)-$(MAJOR_VER).$(MINOR_VER).$(PATCH_VER)+$(BUILD_NUMBER)$(DBG_SUFFIX)
                                    
                                    #######################################
                                    
                                    .PHONY: all clean do-it-all depend with-depends without-depends
                                    
                                    all: do-it-all
                                    
                                    ifeq (.depends,$(wildcard .depends))
                                    include .depends
                                    do-it-all: with-depends
                                    else
                                    do-it-all: without-depends
                                    endif
                                    
                                    without-depends: depend with-depends
                                    
                                    depend: $(BUILD_FILE)
                                    	rm -f .depends
                                    	set -e; for F in $(SRC); do echo -n $(OBJDIR)/ >> .depends; $(CC) -MM $(CFLAGS) $$F >> .depends; done
                                    
                                    with-depends: $(OBJ) $(BASENAME)
                                    
                                    ## Compile
                                    $(OBJDIR)/%o : %c
                                    	$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
                                    
                                    $(OBJDIR)/%o : %cpp
                                    	$(CXX) $(INCLUDES) $(CFLAGS) -c $< -o $@
                                    
                                    $(OBJ): ./Makefile
                                    
                                    $(BASENAME): $(OBJ)
                                    	$(CC) $(CFLAGS) $^ -o $@ $(LDLIBS)
                                    ifeq ($(DEBUG),"yes")
                                    	$(NM) $(BASENAME) | sort > $(BASENAME).map
                                    else
                                    	$(STRIP) $(STRIPFLAGS) $@
                                    endif
                                    	cp $(BASENAME) $(BINDIR)/$(APP_BASE_NAME)
                                    
                                    $(BUILD_FILE): ./Makefile .version
                                    	@echo \#include \"main.h\" > .ver
                                    	@echo -n "const int BuildVersion = " >> .ver
                                    	@cat .version >> .ver
                                    	@echo ";" >> .ver
                                    	@mv -f .ver $@
                                    
                                    # BEWARE the debian/changelog format is very, very picky!
                                    # There must always be specific numbers of spaces in certain places.
                                    # Change with extreme caution.
                                    DEB_CHANGELOG=./debian/changelog
                                    changelog: ./Makefile $(DEB_CHANGELOG)
                                    	@echo "$(APP_BASE_NAME) ($(MAJOR_VER).$(MINOR_VER).$(PATCH_VER)-dev+$(BUILD_DEB)) stable; urgency=low\n"  > debian/changelog
                                    	@echo "  * Initial Historian Release. See FIL-3131\n" >> debian/changelog
                                    	@echo -n " -- maintainer $(DEB_MAINTAINER)  " >> debian/changelog
                                    	@echo `date +"%a, %d %b %Y %H:%M:%S %z"` >> debian/changelog
                                    
                                    deb: changelog
                                    	dpkg-buildpackage -b -uc
                                    
                                    debclean:
                                    	/usr/bin/debclean
                                    
                                    tags: $(SRCPP) *h ./Makefile
                                    	-ctags *cpp *h
                                    
                                    # reformat code with
                                    CODE_STYLE=astyle
                                    CODE_STYLE_PARMS=--style=linux --indent=tab --indent-col1-comments --indent-preproc-cond
                                    style:
                                    	set -e; for F in $(SRC) $(SRCPP) $(wildcard *.h) ; do $(CODE_STYLE) $(CODE_STYLE_PARMS) $$F ; done
                                    
                                    clean:
                                    ifeq (.version,$(wildcard .version))
                                    	$(shell eval expr 0`cat .version` - 1 > .version)
                                    endif
                                    	-rm -f .depends tags $(BUILD_FILE)
                                    	-rm -fR $(OBJDIR)
                                    	-rm -fR $(BINDIR)
                                    
                                    TARFILE=`date +"data-historian-%Y-%m-%d.tar"`
                                    
                                    distclean: clean debclean
                                    	rm -f ../$(APP_BASE_NAME)_*.buildinfo
                                    	rm -f ../$(APP_BASE_NAME)_*.changes
                                    
                                    distgz: distclean
                                    	cd .. && tar cf $(TARFILE) data-historian/* && gzip -f $(TARFILE) && cd -
                                    
                                    # FIL-3174 Added to process Q_OBJECT directive for QObject slots.
                                    moc_udp_server.cpp: udp_server.h
                                    	moc udp_server.h > moc_udp_server.cpp
                                    moc_udp_server.o: moc_udp_server.cpp
                                    	g++ $(CFLAGS) moc_udp_server.cpp -o moc_udp_server.o
                                    

                                    I'm not the original author of this app but if there are things to cleanup I happy to hear about it.

                                    1 Reply Last reply
                                    0

                                    • Login

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Categories
                                    • Recent
                                    • Tags
                                    • Popular
                                    • Users
                                    • Groups
                                    • Search
                                    • Get Qt
                                    • Unsolved