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


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> connection
    какая то непонятка с conection ом.
    Qt Designer ом зделал простой дилалог и поместил кнопки.
    он мне сгенерилл файл создал баноны все нормально.
    но теперь надо связать батон с каким то собитием.
    делаю так
    ExpandedWrap disabled
      namespace Ui {
          class Dialog: public Ui_Dialog
          {
      public:
              Dialog()
              {
                  flg = connect(pushButton, SIGNAL(clicked()),
                        this,SLOT(methode_for_first_button()));
              }
              virtual ~Dialog(){};
       
      public slots:
          void methode_for_first_button()
          {
              QMessageBox::Ok;
          }
            
      protected :
           static bool flg;
       
          };
      } // namespace Ui

    и уже в main е .
    ExpandedWrap disabled
      Ui::Dialog ui;
      QDialog * dialog = new QDialog;
      ui.setupUi(dialog);
      dialog->show();

    но при нажатие на бутон не какого событие не происходит.
    где я что пропустил?
      Цитата knut @
      QMessageBox::Ok;

      Может,
      ExpandedWrap disabled
        QMessageBox::Ok();
        Цитата knut @
        void methode_for_first_button()
        {
        QMessageBox::Ok;
        }

        ExpandedWrap disabled
              void methode_for_first_button()
              {
                  this->done(QMessageBox::Ok);
              }
          вроде простой пример но вопросов дофига.
          1.в сгенериированном фаиле где и обявленны и созданны все элементы диалогового окна(ui_untitled.h)
          есть созданный класс наследник Ui_Dialog а Dialog.так вот все методы, слоты, и все остальное что я обявляю в классе после rebuild a исчезают. т.е файл возврош. к исходному состоянию.(каким был после создания)
          почему?
          mo3r
          Цитата

          QMessageBox::Ok();

          какая разница QMessageBox::Ok(); или QMessageBox::Ok;
          у меня
          ExpandedWrap disabled
            flg = connect(pushButton, SIGNAL(clicked()),
                  this,SLOT(methode_for_first_button()));

          после конекта connect возврошает false.
          он по любому должен вызвать methode_for_first_button()
            Цитата knut @
            почему?

            Потому что во время ребилда uic генерирует на основе *.ui соответствуюющие ui_*.h. По твоему он должен выискивать изменения, сделанные тобой и вставлять их в новую версию? А разве в комментариях там не написано, что файл генерируется автоматически и любые изменения могут быть затёрты?


            Цитата knut @
            какая разница QMessageBox::Ok(); или QMessageBox::Ok;

            А по твоему разницы нет? :lol:
            Ок, а что вообще такое QMessageBox::Ok? Тип? Ф-ция? Шаблон? Значение?
            Как только ответишь на этот вопрос, ещё задумайся над тем какая разница между 5; и 5();.

            Цитата knut @
            после конекта connect возврошает false.

            1. Поместить объявление класса в хэдер.
            2.
            ExpandedWrap disabled
              namespace Ui {
                  class Dialog: public Ui_Dialog
                  {
                       Q_OBJECT // добавить вот это
              public:
                      Dialog()
              // ...

            3. Убедиться, что этот хэдер прогоняется через moc.

            Добавлено
            Цитата knut @
            он по любому должен вызвать methode_for_first_button()

            Кто должен вызывать? 0_о
              archimed7592
              Цитата
              А по твоему разницы нет?

              разница конечно есть.я не о разнице говорю.(и не отрецаю правату ответа и свою ошибку:))
              я о том что при конекте должен вызеватся метод methode_for_first_button(каторый не вызевается)
              а уже потом реализацыя метода:)
              по поводу *.ui файла.
              так что выходет я реализовал класс обявил методы реализовал их и после ребилда копец всему?
              не чего не остается?
              если так то использовать класс(т.е такой подход неправильно).
                Цитата knut @
                я о том что при конекте должен вызеватся метод methode_for_first_button(каторый не вызевается)

                Кто тебе сказал такую глупость?

                Эти строки
                ExpandedWrap disabled
                  flg = connect(pushButton, SIGNAL(clicked()),
                        this,SLOT(methode_for_first_button()));

                эквивалентны этим:
                ExpandedWrap disabled
                  flg = connect(pushButton, "clicked()",
                        this,"methode_for_first_button()");


                Добавлено
                Цитата knut @
                (т.е такой подход неправильно).

                В корне неправильный. Обычно делают так(в отдельном файле):
                ExpandedWrap disabled
                  class MyWidget
                      : public Ui::Dialog
                  {
                      /* ... */
                  }
                  archimed7592
                  что за ошибки?
                  Цитата

                  Error 1 error C2039: 'staticMetaObject' : is not a member of 'Ui::Dialog'
                  Error 2 error C2039: 'qt_metacast' : is not a member of 'Ui::Dialog'
                  Error 3 error C2039: 'qt_metacall' : is not a member of 'Ui::Dialog'

                  как убераю Q_OBJECT все нормально собирается.
                    Код покажи полностью.
                      //Wighet.h
                      ExpandedWrap disabled
                        class CMyWidget:public Ui::Dialog
                        {
                            Q_OBJECT
                        public:
                                CMyWidget();
                                virtual ~CMyWidget(){};
                        public slots:
                            void methode_for_first_button(){//impl.}
                              
                        protected :
                             static bool flg;
                        };

                      //Wighet.cpp
                      ExpandedWrap disabled
                        CMyWidget::CMyWidget()
                        {
                         connect(pushButton, SIGNAL(clicked()),
                                 this,SLOT(methode_for_first_button()));
                         connect(pushButton, SIGNAL(clicked()),
                                 this,SLOT(methode_for_second_button()));
                        }
                        ///...
                        Цитата knut @
                        class CMyWidget:public Ui::Dialog

                        Что такое Ui::Dialog? Твой класс?

                        Добавлено
                        Короче, по простому говоря, вот тебе общее правило: любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки.
                          это класс потомок класс а Ui_Dialog каторый описевает мое диалог. окно(созданное Qt Designer ом)

                          Добавлено
                          изв. не потомок а неследник
                            Цитата knut @
                            это класс потомок класс а Ui_Dialog каторый описевает мое диалог.

                            У него есть Q_OBJECT в определении?
                              Цитата
                              У него есть Q_OBJECT в определении?

                              нет.
                              вопрос по поводу общого правила.
                              а если в классе есть какое обевление
                              pushButton = new QPushButton(Dialog);( у QPushButton есть в обявление Q_OBJECT )
                              то правило надо преминять?
                                Цитата knut @
                                нет.


                                Цитата archimed7592 @
                                любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки.



                                Цитата knut @
                                а если в классе есть какое обевление
                                pushButton = new QPushButton(Dialog);( у QPushButton есть в обявление Q_OBJECT )
                                то правило надо преминять?


                                Цитата archimed7592 @
                                любой класс, явно или неявно унаследованный от QObject должен в private секции использовать макрос Q_OBJECT. Когда это не так появляются такие вот ошибки.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0798 ]   [ 16 queries used ]   [ Generated: 15.05.24, 02:29 GMT ]