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 13.7k 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.
  • Q Offline
    Q Offline
    qt-newbie107
    wrote on last edited by
    #11

    All,

    I have made the switch to Qt 4. However, I have scoured over Qt , TrollTech and Nokia pages, examples and web search resources to to attempt finding a Qt4 example tied to my application and I simply cannot find one.

    I am in urgent need of a simple example showing the following (hand-code C++ would be OK):

    1. A widget (on top) where a GIF file can be loaded and displayed within it (the GIF files are externally crafted, so that's not a problem)

    2. Two push-buttons (below the widget in 1) ) horizontally placed. Each push-button loads a separate GIF:

    • push-button 1 loads GIF # 1 in 1)
    • push-button 2 loads GIF # 2 in 1)

    Eddy: You mentioned using QSignalMapper in Qt 4 with setIcon and the smarts on QString to find the right GIF files. I cant' seem to locate it in the examples section of Qt 4. Can you show me a really simple example or send me the code you refer to ?

    All: I really need your help.

    Thank you very much,

    Qt-Newbie

    1 Reply Last reply
    0
    • EddyE Offline
      EddyE Offline
      Eddy
      wrote on last edited by
      #12

      this is the "link":http://doc.qt.nokia.com/4.7/qsignalmapper.html#details I gave you. It still works ;)
      I know it's not exactly what you want to do but it gives you a good start.

      What do you have so far?

      Qt Certified Specialist
      www.edalsolutions.be

      1 Reply Last reply
      0
      • 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