На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Работа со слотами в QtDesigner
    В QtDesigner можно открыть Edit Signals and Slots и устанавливать соединения, но там есть только стандартные слоты. Допустим я хочу написать обработчик сигнала clicked() у pushButton. Обработчиком как я понимаю должен быть некий мой слот(не из набора стандартных), но как его добавить? Если я в коде класса, который генерируется из ui файла допишу, то Designer его не увидит. Где то в дизайнере добавить слот, я не вижу где. Подскажите как это правильно делается.
      В 4й QT это может делаться либо private-наследованием от Ui:: т.е. в заголовочном файле формы типа
      your_form.h надо написать что-то типа
      ExpandedWrap disabled
        #include "ui_your_form.h"
         
        class YourWidget : public QWidget, private Ui::your_form
        {
            public
                YourWidget (QWidget *par=NULL, Qt:WFlags f =0);
        ...
            private slots:
                void your_slot (void);
         
            private:
               Q_OBJECT
        }

      в your_form.cpp соответственно
      ExpandedWrap disabled
        YourWidget :: YourWidget (QWidget *par, Qt::WFlags f) :
            QWidget (par, f)
        {
            setupUi (this);
         
            ...
            connect (pushButton, SIGNAL (clicked()), this, SLOT (your_slot()));
        }
         
        void YourWidget :: your_slot (void)
        {
        }


      А вообще это тривиальный пример, так что читать документацию.

      С наилучшими пожеланиями,
      Юрий Русинов.

      Добавлено
      Ну или помещением в наследуемый класс формы из namespace Ui.
        То что Вы сказали оно все понятно и этот пример я видел в документации. Но в таком случае этот слот не доступен через дизайнер, но мне кажется, что все таки как то можно его добавить там. И плюс ко всему, если использовать заготовку (Eclise, Qt Eclipse Integration, QtGuiProject), то там в этой заготовке делается не наследование, а включение:
        ExpandedWrap disabled
          #include <QtGui/QWidget>
          #include "ui_test.h"
           
          class test : public QWidget
          {
              Q_OBJECT
           
          public:
              test(QWidget *parent = 0);
              ~test();
           
          private:
              Ui::testClass ui;
          };

        и здесь предложенным вами способом не получится. И я подозреваю, что именно в дизайнере можно добавить слоты, а не ручками в коде. Если так нельзя сделать, то зачем нужна такая стандартная заготовка? Куда тут добавить слот?
          В designer от QT 4 этого сделать нельзя, ибо другая политика построения форм. А в такой заготовке тоже можно добавить слот следующим образом
          ExpandedWrap disabled
            #include <QtGui/QWidget>
            #include "ui_test.h"
             
            class test : public QWidget
            {
                Q_OBJECT
             
            public:
                test(QWidget *parent = 0);
                ~test();
             
            private slots:
                void testSlot (void);
             
            private:
                Ui::testClass ui;
            };

          и сказав в конструкторе что-то типа

          ExpandedWrap disabled
            test :: test (QWidget *parent) : QWidget (parent)
            {
                ui.setupUi (this);
             
                connect (ui.pushButton, SIGNAL (clicked()), this, SLOT (testSlot()));
            }
            Ладно спасибо, сейчас попробую. А в Qt3 можно было?
              Да, в QT3 такое было возможно.
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0307 ]   [ 15 queries used ]   [ Generated: 17.05.24, 10:56 GMT ]