Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Problem with QMessagebox with IOS.. Application becomes unresponsive
Forum Updated to NodeBB v4.3 + New Features

Problem with QMessagebox with IOS.. Application becomes unresponsive

Scheduled Pinned Locked Moved Solved Mobile and Embedded
14 Posts 2 Posters 1.9k Views 2 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.
  • M mrjj
    17 Dec 2018, 18:29

    Hi
    What Qt version are you using ?
    Also did you try Qt::QueuedConnection as mentioned.

    T Offline
    T Offline
    TheCrowKaka
    wrote on 18 Dec 2018, 01:52 last edited by
    #5

    @mrjj My IOS version is 11.4.1

    A Qt Enthusiastic...

    1 Reply Last reply
    0
    • T TheCrowKaka
      18 Dec 2018, 01:43

      @mrjj connect(ui->actionErase_Block,&QAction::triggered,this,&RapidMainDesigner::on_actionErase_Block_triggered_1,Qt::QueuedConnection);

      I tried to override the slot connection done by default and tried to implement the connect with a QueuedConnection. However, the problem still persists.

      Any other way to do this QueuedConnection?

      M Offline
      M Offline
      mrjj
      Lifetime Qt Champion
      wrote on 18 Dec 2018, 08:16 last edited by
      #6

      @TheCrowKaka
      HI
      Well adding a new connection will not override the old one.
      You could use disconnect.

      However, i was more thinking of
      manually adding a new action from code and be using QueuedConnection to test
      if that actually works then.
      I read the link as he manually connected the actions and then it worked.

      T 1 Reply Last reply 18 Dec 2018, 11:43
      0
      • M mrjj
        18 Dec 2018, 08:16

        @TheCrowKaka
        HI
        Well adding a new connection will not override the old one.
        You could use disconnect.

        However, i was more thinking of
        manually adding a new action from code and be using QueuedConnection to test
        if that actually works then.
        I read the link as he manually connected the actions and then it worked.

        T Offline
        T Offline
        TheCrowKaka
        wrote on 18 Dec 2018, 11:43 last edited by
        #7

        @mrjj manually adding a new action and using QueuedConnection to test also did not work.

        A Qt Enthusiastic...

        M 1 Reply Last reply 18 Dec 2018, 12:06
        0
        • T TheCrowKaka
          18 Dec 2018, 11:43

          @mrjj manually adding a new action and using QueuedConnection to test also did not work.

          M Offline
          M Offline
          mrjj
          Lifetime Qt Champion
          wrote on 18 Dec 2018, 12:06 last edited by
          #8

          @TheCrowKaka
          Ok. it sounded like the others got it working that way. but maybe not in all cases.
          It sounds like its fixed in 5.9.4
          What Qt are you on ?

          T 2 Replies Last reply 18 Dec 2018, 12:07
          0
          • M mrjj
            18 Dec 2018, 12:06

            @TheCrowKaka
            Ok. it sounded like the others got it working that way. but maybe not in all cases.
            It sounds like its fixed in 5.9.4
            What Qt are you on ?

            T Offline
            T Offline
            TheCrowKaka
            wrote on 18 Dec 2018, 12:07 last edited by
            #9

            @mrjj I am using Qt5.10.1

            A Qt Enthusiastic...

            1 Reply Last reply
            0
            • M mrjj
              18 Dec 2018, 12:06

              @TheCrowKaka
              Ok. it sounded like the others got it working that way. but maybe not in all cases.
              It sounds like its fixed in 5.9.4
              What Qt are you on ?

              T Offline
              T Offline
              TheCrowKaka
              wrote on 18 Dec 2018, 12:40 last edited by
              #10

              @mrjj I dont see a solution to this problem. I was trying to solve it by creating a custom dialog box with buttons for asking user input.
              Ideally, i should have a window that is translucent and a opaque frame with buttons and a label.
              Do you think this will be feasible?

              A Qt Enthusiastic...

              M 1 Reply Last reply 18 Dec 2018, 13:33
              0
              • T TheCrowKaka
                18 Dec 2018, 12:40

                @mrjj I dont see a solution to this problem. I was trying to solve it by creating a custom dialog box with buttons for asking user input.
                Ideally, i should have a window that is translucent and a opaque frame with buttons and a label.
                Do you think this will be feasible?

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 18 Dec 2018, 13:33 last edited by
                #11

                @TheCrowKaka
                Would it be possible to test with 5.9.4 ?

                Well the issues seems to be related to exec()
                so a new dialog might not work better than QMessageBox
                however , its worth a shot.

                T 1 Reply Last reply 18 Dec 2018, 13:52
                0
                • M mrjj
                  18 Dec 2018, 13:33

                  @TheCrowKaka
                  Would it be possible to test with 5.9.4 ?

                  Well the issues seems to be related to exec()
                  so a new dialog might not work better than QMessageBox
                  however , its worth a shot.

                  T Offline
                  T Offline
                  TheCrowKaka
                  wrote on 18 Dec 2018, 13:52 last edited by
                  #12

                  @mrjj if I execute the dialog with exec in a static function, that seems to work.

                  Invoking the dialog this way works.

                      int ret = iosmsgbox::showmessagebox(tr("Do you really want to delete the block?"),QString(),tr("Yes"),tr("No"));
                  

                  The dialog header...

                  #ifndef IOSMSGBOX_H
                  #define IOSMSGBOX_H
                  
                  #include <QDialog>
                  
                  namespace Ui {
                  class iosmsgbox;
                  }
                  
                  class iosmsgbox : public QDialog
                  {
                      Q_OBJECT
                  
                  public:
                      explicit iosmsgbox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent = 0);
                      ~iosmsgbox();
                      static int showmessagebox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent = 0);
                  
                  private slots:
                      void on_btn_1_clicked();
                  
                      void on_btn_2_clicked();
                  
                      void on_btn_3_clicked();
                  
                  private:
                      Ui::iosmsgbox *ui;
                      int selvalue;
                  };
                  
                  #endif // IOSMSGBOX_H
                  
                  

                  The dialog cpp.

                  #include "iosmsgbox.h"
                  #include "ui_iosmsgbox.h"
                  
                  iosmsgbox::iosmsgbox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent) :
                      QDialog(parent),
                      ui(new Ui::iosmsgbox)
                  {
                      ui->setupUi(this);
                      
                      selvalue=0;
                      ui->btn_1->setVisible(!btn1txt.isEmpty());
                      ui->btn_1->setText(btn1txt);
                      ui->btn_2->setVisible(!btn2txt.isEmpty());
                      ui->btn_2->setText(btn2txt);
                      ui->btn_3->setVisible(!btn3txt.isEmpty());
                      ui->btn_3->setText(btn3txt);
                  }
                  
                  iosmsgbox::~iosmsgbox()
                  {
                      delete ui;
                  }
                  
                  int iosmsgbox::showmessagebox(const QString &message, const QString &btn1txt, const QString &btn2txt, const QString &btn3txt, QWidget *parent)
                  {
                      int returnvalue;
                      iosmsgbox *mymsg = new iosmsgbox(message,btn1txt,btn2txt,btn3txt,parent);
                      mymsg->exec();
                      returnvalue=mymsg->selvalue;
                      mymsg->close();
                      delete mymsg;
                      return returnvalue;
                  }
                  
                  void iosmsgbox::on_btn_1_clicked()
                  {
                      selvalue=1;
                      this->hide();
                  }
                  
                  void iosmsgbox::on_btn_2_clicked()
                  {
                      selvalue=2;
                      this->hide();
                  }
                  
                  void iosmsgbox::on_btn_3_clicked()
                  {
                      selvalue=3;
                      this->hide();
                  }
                  
                  

                  Now I am confused on how to make the background translucent and make just the buttons housed in the frame visible properly.

                  A Qt Enthusiastic...

                  M 1 Reply Last reply 18 Dec 2018, 13:58
                  0
                  • T TheCrowKaka
                    18 Dec 2018, 13:52

                    @mrjj if I execute the dialog with exec in a static function, that seems to work.

                    Invoking the dialog this way works.

                        int ret = iosmsgbox::showmessagebox(tr("Do you really want to delete the block?"),QString(),tr("Yes"),tr("No"));
                    

                    The dialog header...

                    #ifndef IOSMSGBOX_H
                    #define IOSMSGBOX_H
                    
                    #include <QDialog>
                    
                    namespace Ui {
                    class iosmsgbox;
                    }
                    
                    class iosmsgbox : public QDialog
                    {
                        Q_OBJECT
                    
                    public:
                        explicit iosmsgbox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent = 0);
                        ~iosmsgbox();
                        static int showmessagebox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent = 0);
                    
                    private slots:
                        void on_btn_1_clicked();
                    
                        void on_btn_2_clicked();
                    
                        void on_btn_3_clicked();
                    
                    private:
                        Ui::iosmsgbox *ui;
                        int selvalue;
                    };
                    
                    #endif // IOSMSGBOX_H
                    
                    

                    The dialog cpp.

                    #include "iosmsgbox.h"
                    #include "ui_iosmsgbox.h"
                    
                    iosmsgbox::iosmsgbox(const QString &message,const QString &btn1txt,const QString &btn2txt,const QString &btn3txt,QWidget *parent) :
                        QDialog(parent),
                        ui(new Ui::iosmsgbox)
                    {
                        ui->setupUi(this);
                        
                        selvalue=0;
                        ui->btn_1->setVisible(!btn1txt.isEmpty());
                        ui->btn_1->setText(btn1txt);
                        ui->btn_2->setVisible(!btn2txt.isEmpty());
                        ui->btn_2->setText(btn2txt);
                        ui->btn_3->setVisible(!btn3txt.isEmpty());
                        ui->btn_3->setText(btn3txt);
                    }
                    
                    iosmsgbox::~iosmsgbox()
                    {
                        delete ui;
                    }
                    
                    int iosmsgbox::showmessagebox(const QString &message, const QString &btn1txt, const QString &btn2txt, const QString &btn3txt, QWidget *parent)
                    {
                        int returnvalue;
                        iosmsgbox *mymsg = new iosmsgbox(message,btn1txt,btn2txt,btn3txt,parent);
                        mymsg->exec();
                        returnvalue=mymsg->selvalue;
                        mymsg->close();
                        delete mymsg;
                        return returnvalue;
                    }
                    
                    void iosmsgbox::on_btn_1_clicked()
                    {
                        selvalue=1;
                        this->hide();
                    }
                    
                    void iosmsgbox::on_btn_2_clicked()
                    {
                        selvalue=2;
                        this->hide();
                    }
                    
                    void iosmsgbox::on_btn_3_clicked()
                    {
                        selvalue=3;
                        this->hide();
                    }
                    
                    

                    Now I am confused on how to make the background translucent and make just the buttons housed in the frame visible properly.

                    M Offline
                    M Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 18 Dec 2018, 13:58 last edited by
                    #13

                    Ok, so its not directly related to exec().
                    Good test then.
                    One note. i dont think you have to new it. since exec is blocking.
                    ...
                    iosmsgbox mymsg(message,btn1txt,btn2txt,btn3txt,parent);
                    mymsg.exec();
                    returnvalue=mymsg.selvalue;
                    mymsg.close();

                    should work just as well.

                    • background translucent

                    Is the normal messagebox translucent ? or why you want this ?

                    • buttons housed in the frame visible properly.
                      You mean dialog is too small or why are they not ok ?
                    T 1 Reply Last reply 18 Dec 2018, 16:22
                    0
                    • M mrjj
                      18 Dec 2018, 13:58

                      Ok, so its not directly related to exec().
                      Good test then.
                      One note. i dont think you have to new it. since exec is blocking.
                      ...
                      iosmsgbox mymsg(message,btn1txt,btn2txt,btn3txt,parent);
                      mymsg.exec();
                      returnvalue=mymsg.selvalue;
                      mymsg.close();

                      should work just as well.

                      • background translucent

                      Is the normal messagebox translucent ? or why you want this ?

                      • buttons housed in the frame visible properly.
                        You mean dialog is too small or why are they not ok ?
                      T Offline
                      T Offline
                      TheCrowKaka
                      wrote on 18 Dec 2018, 16:22 last edited by
                      #14

                      @mrjj
                      The Transluscent background and visible frame is only about trying to give the look similar to the messagebox.
                      But this workaround works for me.

                      A Qt Enthusiastic...

                      1 Reply Last reply
                      1

                      14/14

                      18 Dec 2018, 16:22

                      • Login

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