Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. failed connect
Qt 6.11 is out! See what's new in the release blog

failed connect

Scheduled Pinned Locked Moved Solved General and Desktop
connect failure
12 Posts 4 Posters 6.2k 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.
  • N Offline
    N Offline
    nischu
    wrote on last edited by
    #3

    Q_OBJECT is set, and the build process was without warnings.

    The perfidious is, that i have all source files belonging to the tutorial so i was being able to compare these to my own try. But although I compared every piece of code, I didn't found a semantic distinction.
    Only the *.ui files I couldn't check, that would too wearisome for me.

    Here the code for the connect statements:

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        connect( ui->actionNewGame, SIGNAL(triggered()),
                 this, SLOT(startNewGame()));
    
        connect( ui->actionQuit, SIGNAL(triggered()),
                 qApp, SLOT(quit()));
    
        connect( ui->gameBoard, SIGNAL(currentPlayerChanged(TicTacToeWidget::Player))
                 , this, SLOT(updateNameLabels()));
    
        connect( ui->gameBoard, SIGNAL(gameOver(TicTacToeWidget::Player))
                 , this, SLOT(handleGameOver(TicTacToeWidget::Player)));
    }
    

    The first two connections will created fine.

    I suppose i made a mistake within Designer Mode, but i have no clue where.
    Could it be that I made a mistake at naming the sender's source? But i don't see such thing, in the Designer Mode's Object Inspector.

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #4

      @nischu said:
      hi the UI is just translated into code. ( the setUI function)
      so i doubt it has anything to do with it.

      also since you use directly connect, you are in control.

      one thing i do wonder

      connect( ui->gameBoard, SIGNAL(currentPlayerChanged(TicTacToeWidget::Player))
      , this, SLOT(updateNameLabels()));

      should that not be
      connect( ui->gameBoard, SIGNAL(currentPlayerChanged(TicTacToeWidget::Player))
      , this, SLOT(updateNameLabels(TicTacToeWidget::Player)));

      anyway, you can check what connect returns to see if it fails

      qDebug() << "con1:" << connect(xxx

      it says TRUE when it accepts the connect.

      1 Reply Last reply
      0
      • N Offline
        N Offline
        nischu
        wrote on last edited by
        #5

        @mrjj said:
        should that not be
        connect( ui->gameBoard, SIGNAL(currentPlayerChanged(TicTacToeWidget::Player))
        , this, SLOT(updateNameLabels(TicTacToeWidget::Player)));

        No, it's ok. Here the handling:

        void MainWindow::updateNameLabels()
        {
            QFont f = ui->player1->font();
            f.setBold( ui->gameBoard->currentPlayer() == TicTacToeWidget::Player1);
            ui->player1->setFont(f);
            f.setBold( ui->gameBoard->currentPlayer() == TicTacToeWidget::Player2);
            ui->player2->setFont(f);
        }
        

        Thanks for your hint with QDebug. But that says no news: con1,con2 == true, con3,con4 == false

        1 Reply Last reply
        0
        • mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #6

          Hi if you can zip the whole project, i could have a look?
          or link to the tut.
          or show the .h and .cpp where signals/slots are defined

          1 Reply Last reply
          0
          • N Offline
            N Offline
            nischu
            wrote on last edited by
            #7

            mrjj, Thanks for taking your time looking over my source code.
            [Here are my own files]

            [And here the files published by my book] This compiles and runs without errors.

            jerome_isAviableJ mrjjM 2 Replies Last reply
            0
            • N nischu

              mrjj, Thanks for taking your time looking over my source code.
              [Here are my own files]

              [And here the files published by my book] This compiles and runs without errors.

              jerome_isAviableJ Offline
              jerome_isAviableJ Offline
              jerome_isAviable
              wrote on last edited by
              #8

              Hi @nischu,
              when you connect signal and slot the sign has to be exactly the same.
              If you have a signal signed: currentPlayerChanged(TicTacToeWidget::Player)
              you need to link with a slot signed: compatibleSlotToBeLinked(TicTacToeWidget::Player)

              if not, the link not occur as specified in the doc (just before "Advanced Signals and Slots Usage" not far from the end of the article doc.

              http://doc.qt.io/qt-5/signalsandslots.html

              1 Reply Last reply
              2
              • N nischu

                mrjj, Thanks for taking your time looking over my source code.
                [Here are my own files]

                [And here the files published by my book] This compiles and runs without errors.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #9

                @nischu

                hi as @jerome_isAviable says

                it was the name space/scope naming that confused it.
                "player" vs "TicTacToeWidget::player"

                void currentPlayerChanged( Player);
                works if
                void currentPlayerChanged( TicTacToeWidget::Player );

                here is fixed and running sample
                https://www.dropbox.com/s/jvsoulsvmh3292g/tictactoe.zip?dl=0

                1 Reply Last reply
                3
                • VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by
                  #10

                  Despite almost all the documentation still using SIGNAL() and SLOT(), you should really switch to the Qt5 syntax https://wiki.qt.io/New_Signal_Slot_Syntax it catches these problems at compile time and makes it easier to solve them

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  mrjjM 1 Reply Last reply
                  2
                  • VRoninV VRonin

                    Despite almost all the documentation still using SIGNAL() and SLOT(), you should really switch to the Qt5 syntax https://wiki.qt.io/New_Signal_Slot_Syntax it catches these problems at compile time and makes it easier to solve them

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by mrjj
                    #11

                    @VRonin
                    I complete agree that the new syntax has much better checks etc
                    but sadly its very unfriendly to
                    beginners when overloaded signals are used.

                    connect(spinbox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
                    vs
                    connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));

                    Its sad that compile time check has such a high price in syntax complexity and
                    pretty ugly to look at :) ( IMO)

                    update:
                    just seen that Qt 5.7 has qOverload
                    so my point is not so valid :)

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      nischu
                      wrote on last edited by
                      #12

                      Thank you all for helping detect ths error. I will take a close look at the related docs.
                      Regards, Nico

                      1 Reply Last reply
                      1

                      • Login

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