Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Qt textfinder tutorial issue

    General and Desktop
    5
    9
    6688
    Loading More Posts
    • 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.
    • C
      Cannabis2011 last edited by

      Hello, im a little (Or a big) noob to this -QT- Qt framework, and i trying to understand how it works. I was trying the Textfinder tutorial in -QT- Qt Creator, but without any succes. I have done all the tasks, but in the end, Im getting thís error:

      @
      D:\QtSDK\Examples\TextFinder-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug..\TextFinder\textfinder.cpp:19: error: no 'void TextFinder::on_findButton_clicked()' member function declared in class 'TextFinder'
      @

      My textfinder.cpp is looking like this:

      @
      #include "textfinder.h"
      #include "ui_textfinder.h"
      #include <QtCore/QFile>
      #include <QtCore/QTextStream>

      TextFinder::TextFinder(QWidget *parent) :
      QWidget(parent),
      ui(new Ui::TextFinder)
      {
      ui->setupUi(this);
      loadTextFile();
      }

      TextFinder::~TextFinder()
      {
      delete ui;
      }

      void TextFinder::on_findButton_clicked()
      {
      QString searchString = ui->lineEdit->text();
      ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
      QMetaObject::connectSlotsByName(TextFinder);
      }

      void TextFinder::loadTextFile()
      {
      QFile inputFile(":/input.txt");
      inputFile.open(QIODevice::ReadOnly);

       QTextStream in(&inputFile&#41;;
       QString line = in.readAll();
       inputFile.close();
      
       ui->textEdit->setPlainText(line);
       QTextCursor cursor = ui->textEdit->textCursor();
       cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
      

      }
      @

      Can someone explain what i had done wrong, and i apoligize for my bad english.

      [EDIT: code formatting, please wrap in @-tags, Volker]

      1 Reply Last reply Reply Quote 0
      • G
        goetz last edited by

        You most probably forgot to add on_findButton_clicked() as a public slot in your class header file textfinder.h

        It should look something like this:

        @
        class TextFinder : public QWidget
        {

        Q_OBJECT

        public:
        // your constructors etc. here

        protected slots:
        void on_findButton_clicked();

        // ... other stuff ...
        };
        @

        http://www.catb.org/~esr/faqs/smart-questions.html

        1 Reply Last reply Reply Quote 0
        • C
          Cannabis2011 last edited by

          This is my header file:

          @
          #ifndef TEXTFINDER_H
          #define TEXTFINDER_H

          #include <QWidget>

          namespace Ui {
          class TextFinder;
          }

          class TextFinder : public QWidget
          {
          Q_OBJECT

          public:
          explicit TextFinder(QWidget *parent = 0);
          ~TextFinder();

          private slots:

          void on_FindButton_clicked();
          

          private:
          Ui::TextFinder *ui;
          void loadTextFile();
          };

          #endif // TEXTFINDER_H
          @

          1 Reply Last reply Reply Quote 0
          • M
            mlong last edited by

            Again, please put @ tags around your code samples.

            (Above post edited to make @-tag correction.)

            Software Engineer
            My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

            1 Reply Last reply Reply Quote 0
            • G
              goetz last edited by

              on_findButton_clicked != on_FindButton_clicked

              (f vs. F in find vs. Find)

              http://www.catb.org/~esr/faqs/smart-questions.html

              1 Reply Last reply Reply Quote 0
              • C
                Cannabis2011 last edited by

                Sorry, im all new to this. But it helped, thanks a lot.

                1 Reply Last reply Reply Quote 0
                • G
                  goetz last edited by

                  You're welcome. Please always keep in mind that C++ (and C) are case sensitive languages, so a variable x is not the same a variable X. Also this affects the autoconnection, so you should double check the exact spelling of your widget in the UI (upper or lower case F).

                  BTW: If you use Qt Creator as your IDE, just go to the header file, put the cursor on a method name and press alt-return, this will add a stub implementation in your .cpp file with all the spelling and upper/lower case done right :)

                  http://www.catb.org/~esr/faqs/smart-questions.html

                  1 Reply Last reply Reply Quote 0
                  • B
                    Byro last edited by

                    Hi,
                    I'm just starting too. At this point in time it seems the following will work

                    @QMetaObject::connectSlotsByName(this);@

                    The most reasonable place to place it is in the TextFinder constructor, so it looks like this:

                    @TextFinder::TextFinder(QWidget *parent) :
                    QWidget(parent),
                    ui(new Ui::TextFinder)
                    {
                    ui->setupUi(this);
                    loadTextFile();
                    QMetaObject::connectSlotsByName(this);
                    }@

                    I am not sure why would you want it in a clicked event and no one corrected you. :)

                    Using version
                    Qt Creator 2.4.1
                    Based on Qt 4.8.0 (64 bit)
                    Built on Mar 21 2012 at 22:53:22

                    1 Reply Last reply Reply Quote 0
                    • L
                      lypo last edited by

                      [quote author="Byro" date="1343928612"]
                      The most reasonable place to place it is in the TextFinder constructor, so it looks like this:
                      @TextFinder::TextFinder(QWidget *parent) :
                      QWidget(parent),
                      ui(new Ui::TextFinder)
                      {
                      ui->setupUi(this);
                      loadTextFile();
                      QMetaObject::connectSlotsByName(this);
                      }@[/quote]

                      Yeah, thanks Byro! It works. In the Tutorial is not written where to place the QMetaObject::
                      Also they want the className "TextFinder" - this dosn't work.

                      This is my first work with Qt - I looked for the mistake half the night. :-(
                      Now I'm HAPPY!

                      @Volker: Thanks for your advice! Sounds very useful. :-)

                      Sorry, I hope you'll understand my bad english - had been a bad teacher in school - 43 years ago. :-)

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post