Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. Brainstorm
  4. Qt/Qt Designer (Version 3.x) GUI questions
Forum Updated to NodeBB v4.3 + New Features

Qt/Qt Designer (Version 3.x) GUI questions

Scheduled Pinned Locked Moved Brainstorm
28 Posts 5 Posters 14.0k 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.
  • L Offline
    L Offline
    loladiro
    wrote on last edited by
    #13

    consider the following:
    @
    //in mylabel.h
    class MyLabel : public QLabel
    {
    Q_OBJECT

    public slots:
    void setFileName(QString name)
    {
    setPixmap(name);
    }
    };

    //in main.cpp
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

     QSignalMapper mapper;
     MyLabel label;
     QPushButton b1;
     QPushButton b2;
     mapper.setMapping(&b1,"gif1.gif");
     mapper.setMapping(&b2,"gif2.gif");
     QObject::connect(&b1,SIGNAL(clicked()),&mapper,SLOT(map()));
     QObject::connect(&b2,SIGNAL(clicked()),&mapper,SLOT(map()));
     QObject::connect(&mapper,SIGNAL(mapped(QString)),&label,SLOT(setFileName(QString)));
     label.show();
    
     return app.exec();
    

    }

    @

    1 Reply Last reply
    0
    • Q Offline
      Q Offline
      qt-newbie107
      wrote on last edited by
      #14

      Eddy, Loladiro,

      Thanks very much for your replies.

      Loladiro: I will start with your code and let you know how I fare.

      Qt-Newbie

      1 Reply Last reply
      0
      • L Offline
        L Offline
        loladiro
        wrote on last edited by
        #15

        There was a copy&paste error in my code.
        I had
        @
        mapper.setMapping(&b2,"gif2.gif");
        @
        twice. It's fixed now.

        1 Reply Last reply
        0
        • Q Offline
          Q Offline
          qt-newbie107
          wrote on last edited by
          #16

          Loladiro,

          I took your code and made some mods to it so that it would compile without errors using Qt 4.2.1. Here they are:

          1. mylabel.h

          @
          #ifndef MYLABEL_H
          #define MYLABEL_H

          #include <QLabel>

          //in mylabel.h
          class MyLabel : public QLabel
          {
          Q_OBJECT

          public slots:
          void setFileName(QString name)
          {
          setPixmap(name);
          }
          };

          #endif
          @

          1. Also, made some mods to main.cpp:

          @
          #include <QApplication>
          #include <QSignalMapper>
          #include <QPushButton>

          #include "mylabel.h"

          //in main.cpp
          int main(int argc, char *argv[])
          {
          QApplication app(argc, argv);

           QSignalMapper mapper;
           MyLabel label;
           QPushButton b1;
           QPushButton b2;
           mapper.setMapping(&b1,"gif1.gif");
           mapper.setMapping(&b2,"gif2.gif");
           QObject::connect(&b1,SIGNAL(clicked()),&mapper,SLOT(map()));
           QObject::connect(&b2,SIGNAL(clicked()),&mapper,SLOT(map()));
           QObject::connect(&mapper,SIGNAL(mapped(QString)),&label,SLOT(setFileName(QString)));
           label.show();
          
           return app.exec();
          

          }
          @

          When I run the executable, I get a very small window. When I expand it, I am getting a pure grey background: No pushbuttons. No gifs displayed. Nothing.

          Please help.

          Thanks,
          Qt-Newbie

          1 Reply Last reply
          0
          • L Offline
            L Offline
            loladiro
            wrote on last edited by
            #17

            I though you would incorporate it into existing code, my mistake:
            @
            int main(int argc, char *argv[])
            {
            QApplication app(argc, argv);

             QWidget mainWidget;
            
             QSignalMapper mapper;
             MyLabel label;
             QPushButton b1(&mainWidget);
             QPushButton b2(&mainWidget);
             mapper.setMapping(&b2,"gif2.gif");
             mapper.setMapping(&b2,"gif2.gif");
             QObject::connect(&b1,SIGNAL(clicked()),&mapper,SLOT(map()));
             QObject::connect(&b2,SIGNAL(clicked()),&mapper,SLOT(map()));
             QObject::connect(&mapper,SIGNAL(mapped(QString)),&label,SLOT(setFileName(QString)));
            
             QVBoxLayout verticalLayout(&mainWidget);
             verticalLayout.addWidget(&label);
             QHBoxLayout horizontalLayout(&mainWidget);
             horizontalLayout.addWidget(&b1);
             horizontalLayout.addWidget(&b2);
             verticalLayout.addLayout(&horizontalLayout);
            
             mainWidget.show();
            
             return app.exec();
            

            }
            @

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mlong
              wrote on last edited by
              #18

              You're never calling show() on your buttons.

              While, ideally, all the widgets should be children of another parent widget with a layout, etc., the code you have is sufficient to test out the mechanics of the QSignalMapper, but you currently need to show each widget.

              Edit: Nevermind. You figured it out. :-)

              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
              0
              • L Offline
                L Offline
                loladiro
                wrote on last edited by
                #19

                @
                Edit: Nevermind. You figured it out. :-)
                @
                I would have included all that for the beginning, but I thought he wanted an example usage, not a complete app.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mlong
                  wrote on last edited by
                  #20

                  No worries. It all seems to have sorted itself out :-)

                  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
                  0
                  • Q Offline
                    Q Offline
                    qt-newbie107
                    wrote on last edited by
                    #21

                    All,

                    The example worked ! Thank you all for your notes.

                    I have further questions:

                    1. The worked out example indicates the ability to do the sequence:
                      Push a Button --> signal/slot --> map a GIFn file --> display GIFn in mylabel

                    What I would need to do is:

                    a) Push a Button --> Query an interface --> Receive reply from interface --> signal/slot/map a GIF file based on interface reply --> display GIF in mylabel

                    Where would I put the stub code to accomplish this ? Is there a Qt 4 solution ?

                    b) Can I make system call functions in Qt 4 ? I am talking a "system()" type call to a Python 2.4 script I have already developed.

                    Please reply.

                    Thank you all,

                    Qt-Newbie

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      loladiro
                      wrote on last edited by
                      #22

                      [quote]
                      Push a Button —> Query an interface —> Receive reply from interface —> signal/slot/map a GIF file based on interface reply —> display GIF in mylabel

                      Where would I put the stub code to accomplish this ? Is there a Qt 4 solution ?
                      [/quote]
                      A little bit trickier, but like:
                      @

                      class MyMainWindow
                      {
                      QLabel *label;

                      public slots:
                      void buttonClicked(int nr)
                      {
                      label->setPixmap(queryInterface(nr));
                      }
                      };

                      //and the button creation like:
                      for(int i = 0; i < maxButtons; ++i)
                      {
                      QPushButton *b = new QPushButton(this);
                      mapper.setMapping(b,i);
                      connect(b,SIGNAL(clicked()),&mapper,SLOT(map()));
                      myLayout->addWidget(b);
                      }

                      @

                      Depending on how long it takes to query the interface, you might want to have a separate, slot to set the image that is being called once the interface is done.

                      [quote]
                      b) Can I make system call functions in Qt 4 ? I am talking a “system()” type call to a Python 2.4 script I have already developed.
                      [/quote]

                      Have a look at "QProcess":http://doc.qt.nokia.com/latest/qprocess.html

                      DISCLAIMER: The code shown is a use case example and neither complete nor intended for direct use in an application.

                      1 Reply Last reply
                      0
                      • Q Offline
                        Q Offline
                        qt-newbie107
                        wrote on last edited by
                        #23

                        All,

                        How do I place text inside the pushbuttons ? I do not see any methods with the QPushButton class. Is it inherited ?

                        Please reply.

                        Thanks,
                        Qt-Newbie

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          loladiro
                          wrote on last edited by
                          #24

                          Yes, from "QAbstractButton":http://doc.qt.nokia.com/latest/qabstractbutton.html

                          1 Reply Last reply
                          0
                          • Q Offline
                            Q Offline
                            qt-newbie107
                            wrote on last edited by
                            #25

                            Loladiro,

                            Thanks. I got the button text labels via the QAbstractButton class.

                            Please explain where "queryInterface(nr)" is defined. I am a bit confused. Do I need to write a class/method for this ? Is it a wrapper ?

                            Thanks,
                            Qt-Newbie

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              mlong
                              wrote on last edited by
                              #26

                              Qt-newbie, please start a new thread for new topics.

                              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
                              0
                              • EddyE Offline
                                EddyE Offline
                                Eddy
                                wrote on last edited by
                                #27

                                I splitted it and used this title :
                                Can you please recommend a textbook on Qt4

                                Qt Certified Specialist
                                www.edalsolutions.be

                                1 Reply Last reply
                                0
                                • L Offline
                                  L Offline
                                  loladiro
                                  wrote on last edited by
                                  #28

                                  [quote author="qt-newbie" date="1313106592"]Loladiro,

                                  Thanks. I got the button text labels via the QAbstractButton class.

                                  Please explain where "queryInterface(nr)" is defined. I am a bit confused. Do I need to write a class/method for this ? Is it a wrapper ?

                                  Thanks,
                                  Qt-Newbie[/quote]

                                  Since I have no idea what kind of interface you have I just put it there to indicate where you have to query your interface.

                                  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 Extensions
                                  • Unsolved