QLabel text



  • Hello guys i am pretty new to Qt and you may find my question silly.

    I have created 3 simple files
    main.cpp
    TextController.h
    TextController.cpp

    What i do , is i have a QLabel in the main Widget and i want to print the contents of the QLabel .
    i tried in the TextController.h to get the Qlabel text by--> QString text = myLabel->text() and then cout<<text<<endl; but i get compile error.
    I have searched all of over the net but nothing :/

    //TextController.h
    @#include <qobject.h>
    class TextController : public QObject
    {
    Q_OBJECT
    public:
    TextController();
    private slots:
    void Print();
    };@

    // TextControllet.cpp
    @#include "TextController.h"
    #include <iostream>
    #include <qstring.h>

    using namespace std;
    TextController::TextController()
    {
    QString labelText = myLabel->text();
    }
    void TextController::Print()
    { //print()

    cout<<"Label Text Goes Here!"<<endl;
    } //print()@

    // main
    @#include <qapplication.h>
    #include <qlabel.h>
    #include <qpushbutton.h>
    #include "TextController.h"

    int main(int argc, char *argv[])
    {
    QApplication myApp(argc,argv);

    QWidget *myWidget = new QWidget;
    myWidget->setGeometry(400,300,120,90);

    TextController myTextController;

    QLabel *myLabel = new QLabel("Hello World!",myWidget,0);
    QPushButton *myPrintButton = new QPushButton("Print",myWidget);
    QPushButton *myQuitButton = new QPushButton("Exit",myWidget);

    myLabel->setGeometry(10,10,100,30);
    myPrintButton->setGeometry(10,50,100,30);
    myQuitButton->setGeometry(10,90,100,30);

    QObject::connect(myPrintButton,SIGNAL(clicked()),&myTextController,SLOT(Print()));
    QObject::connect(myQuitButton,SIGNAL(clicked()),&myApp,SLOT(quit()));
    myWidget->show();
    return myApp.exec();
    }@

    any help would be appreciated



  • Hi,

    qDebug() can be used in such cases.

    Regards,

    Debao



  • quote author="eXevio" date="1332294119" but i get compile error. [/quote]

    So, what is that error exactly?



    • Qt headers are usually included using <code>#include <QtModule/QClass></code>, not <code>#include <qclass.h></code>
    • You are missing a call to the parent constructor in TextController.cpp #6
    • labelText is a local variable in TextController #8
    • myLabel is not a member in TextController #8
    • Qt widgets are usually positioned using layout managers, not absolute positioning

    labelText has to be a member, so it is accessible in TextController::Print().

    myLabel is unknown to TextController; it has to be passed to TextController (for example in the constructor or using a setter) and stored in a member variable.



  • @TextController.cpp: In constructor ‘TextController::TextController()’:
    TextController.cpp:8: error: ‘myLabel’ was not declared in this scope
    TextController.cpp:8: warning: unused variable ‘labelText’
    TextController.cpp: In member function ‘void TextController::Print()’:
    TextController.cpp:13: error: ‘labelText’ was not declared in this scope
    make: *** [TextController.o] Error 1
    @

    and my TextController.cpp looks like:
    @#include "TextController.h"
    #include <iostream>
    #include <qstring.h>

    using namespace std;
    TextController::TextController()
    {
    QString labelText = myLabel->text();
    }
    void TextController::Print()
    { //print()

    cout<<labelText<<endl;
    } //print()@



  • myLabel is unknown to TextController; it has to be passed to TextController (for example in the constructor or using a setter) and stored in a member variable.[/quote]
    Thanks For the info Lukas, i could figure out that but the question is how to implement it :o



  • There are various ways - depending on the design of your application. The obvious one is passing the label to TextController in the constructor, using a setter or a combination of both.
    @
    class TextController
    {
    public:
    TextController(QLabel *label) : label_(label)
    {
    }

    void setLabel(QLabel *label)
    {
        label_ = label;
    }
    
    QLabel *label() const
    {
        return label_;
    }
    
    void Print()
    {
        if(label_ != 0)
        {
            cout << label->text().toStdString();
        }
    }
    

    private:
    QLabel *label_;
    }

    ....

    TextController myTextController(myLabel);
    ....
    myTextController.setLabel(myLabel);
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.