Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Bulgarian
  4. [Решен]Сигнали и слотове buttonbox и pushbutton
Forum Updated to NodeBB v4.3 + New Features

[Решен]Сигнали и слотове buttonbox и pushbutton

Scheduled Pinned Locked Moved Bulgarian
8 Posts 2 Posters 3.4k 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.
  • A Offline
    A Offline
    aleksandra
    wrote on last edited by
    #1

    Здравейте :)
    Искам да свържа бутонче Open от buttonbox, така, че да прави същото, като че ли pushbutton-а е натиснат.
    Аз пиша следния код:
    @ connect(ui->buttonBox->button(QDialogButtonBox::Open), SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    @
    нямам изписани грешки, но вместо да се отвари новият диалог, настоящият се затваря.
    Имам 2 бутона в buttonbox-а и целият код, който се грижи за тях е:
    @void Songs::on_buttonBox_clicked(QAbstractButton *button)
    {
    connect(ui->buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(close()));
    connect(ui->buttonBox->button(QDialogButtonBox::Open), SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    }
    @
    Кодът който седи в on_pushButton_clicked() е:
    @void Songs::on_pushButton_clicked()
    {

    Lyrics lyricswin;
    lyricswin.setModal(true);
    lyricswin.showMaximized();
    lyricswin.exec();
    

    }
    @
    Някой може ли да ми обясни къде бъркам?

    1 Reply Last reply
    0
    • T Offline
      T Offline
      task_struct
      wrote on last edited by
      #2

      Здравей,

      не разбирах точно. Искаш Open бутона на диалога да прави същото като някакъв QPushButton, който седи във основният ти прозорец?

      Мисля, че всички бутони в buttonbox–а на диалоговият прозорец са свързани и със слот, който затваря диалога.

      "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

      • Linu...
      1 Reply Last reply
      0
      • A Offline
        A Offline
        aleksandra
        wrote on last edited by
        #3

        Да, правилно си разбрал идеята ми. Според мен трябва да може да се променя функционалността на бутоните, иначе няма логика да имат различни имена. QDialogButtonBox::Open 0x00002000 A "Open" button defined with the AcceptRole.
        Трябва да отваня нещо, нали?

        1 Reply Last reply
        0
        • T Offline
          T Offline
          task_struct
          wrote on last edited by
          #4

          Според мен нещо се обърква с exec-a. Всеки такъв exec() си създава свой eventloop и само слотове/сигнали свързани с него могат да бъдат извикани.

          Даже май точно това става. Когато натиснеш Open бутона. Той казва Натиснаха ме. Eventloop-а започва да обработва слотовете за тоя сигнал. Единият е Затвори прозореца, другия е твоя Отвори нов прозорец. Затварянето се изпълнява първо и затваря прозореца и унищожава eventloop-а, с което прекратява и изпълнението на всички други слотове, регистрирани в него.

          Ако искаш тоя диалог да си остане отворен, трябва да видиш в документацията има ли начин да му кажеш да не се затваря при натискане на бутон от buttonbox-а.

          Ако не държиш да остава отворен, а само новият да се покаже. Може да гледаш резултата от exec() и когато той е, че е натиснат Open да създаде новият диалог.

          "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

          • Linu...
          1 Reply Last reply
          0
          • A Offline
            A Offline
            aleksandra
            wrote on last edited by
            #5

            Ами размених им местата, за да видя какво ще се получи- същия резултат.
            Не ми трябва да е отворен настоящият прозорец, искам да ми се отвори следващият, но именно свързването на Open с отварянето на новия не ми се получава.
            Мислех си, че нещо не съм схванала сигналите и слотовете, но не ми изкарва грешка за тях.

            1 Reply Last reply
            0
            • T Offline
              T Offline
              task_struct
              wrote on last edited by
              #6

              Не да размениш твоите конецкии, то има и други които не виждаш. Те се създават първи и за това първи се изпълняват.

              Според мен най-лесно ще е ето така:

              @
              void Songs::on_pushButton_clicked()
              {

              Lyrics lyricswin;
              lyricswin.setModal(true);
              lyricswin.showMaximized();
              int res = lyricswin.exec();
              
              if ( res == QDialogButtonBox::Open )
              {
                  // създаваш си другият прозорец и му даваш exec()
              }
              

              }
              @

              "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

              • Linu...
              1 Reply Last reply
              0
              • A Offline
                A Offline
                aleksandra
                wrote on last edited by
                #7

                Ама на мен отварянето на новия прозорец ми е в void Songs::on_pushButton_clicked().
                Когато се изпълнява този код се намирам в прозорец който се казва songswin, а като се натисне бутона се създава lyricswin.

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  aleksandra
                  wrote on last edited by
                  #8

                  Открих си грешката :) просто е трябвало други сигнали да взимам :)
                  @void Songs::on_buttonBox_clicked(QAbstractButton *button)
                  {
                  connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(on_pushButton_clicked()));
                  connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(close()));
                  }@
                  така работи, както исках :)

                  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