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


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Не работает слот , need help
    Вопрос поставлен! Вот код:

    ExpandedWrap disabled
      #include<QtGui>
      class QTableWidget2 : public QTableWidget
      {
        Q_OBJECT
        public slots:
          void clear(QTableWidget &, QTableWidgetItem &);
          void generate(QTableWidget &, QTableWidgetItem &);
          int calculate(QTableWidget &, QTableWidgetItem &);
      };
       
      // Инициализация массива нулями:
      void QTableWidget2::clear(QTableWidget &table, QTableWidgetItem &item)
      {
        item.setText("0");
        for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
          QTableWidgetItem *newItem = new QTableWidgetItem(item);
          table.setItem(i, j, newItem);
        }
      }
      /*
      // Заполнение массива псевдослучайными числами:
      void QTableWidget2::generate(QTableWidget &table, QTableWidgetItem &item)
      {
        int x=0;
        qsrand(1);
        for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
          QTableWidgetItem *newItem = new QTableWidgetItem(item);
            
          x=qrand();
          QVariant v(x);
          QString s=v.toString();
            
          newItem->setText(s);
          table.setItem(i, j, newItem);
        }
      }
       
      // Вычисление определителя:
      int QTableWidget2::calculate(QTableWidget &table, QTableWidgetItem &item)
      {
        int result=0;
        
        QVariant v1(takeItem(0, 0));
        QVariant v2(takeItem(0, 1));
        QVariant v3(takeItem(0, 2));
        
        QVariant v4(takeItem(1, 0));
        QVariant v5(takeItem(1, 1));
        QVariant v6(takeItem(1, 2));
        
        QVariant v7(takeItem(2, 0));
        QVariant v8(takeItem(2, 1));
        QVariant v9(takeItem(2, 2));
        
        
        result=( v1.toInt()+v5.toInt()+v9.toInt() )+
        ( v2.toInt()+v6.toInt()+v7.toInt() )+
        ( v3.toInt()+v4.toInt()+v8.toInt() )-
        ( v3.toInt()+v5.toInt()+v7.toInt() )-
        ( v2.toInt()+v4.toInt()+v9.toInt() )-
        ( v1.toInt()+v6.toInt()+v8.toInt() );
        
        return result;
      }
      */
      int main(int argc, char *argv[])
      {  
        QApplication app(argc, argv);
        
        QWidget wgt;
        wgt.setWindowTitle("Determinant Calculator");
        wgt.resize(400, 250);
        
          QTableWidget table(3, 3);
          QTableWidgetItem item;
          QTableWidget2 tw;
          
          // Проинициализируем массив нулями:
          tw.clear(table, item);
          
          // Заполним массив псевдослучайными числами:
          //tw.generate(table, item);
          
          // Вычислим определитель:
          //int det=tw.calculate(table, item);
          
          
          //table.setCellWidget(0, 1, &lbl);
          
          // Компоненты интерфейса:
          QVBoxLayout vbox;
          QHBoxLayout hbox1, hbox2;
          
          QPushButton btn1("&Calculate");
          QPushButton btn2("&Generate");
          QPushButton btn3("&Clear");
          QPushButton btn4("&Exit");
          
          hbox1.addWidget(&btn1);
          hbox1.addWidget(&btn2);
          hbox1.addWidget(&btn3);
          hbox1.addWidget(&btn4);
          
          QLabel lbl1("Determinant = ");
          QLabel lbl2("0"); lbl2.setNum(1/*det*/);
          
          hbox2.addWidget(&lbl1);
          hbox2.addWidget(&lbl2);
          
          vbox.addWidget(&table);
          vbox.addLayout(&hbox1);
          vbox.addLayout(&hbox2);
        wgt.setLayout(&vbox);
        
        QObject::connect(&btn3, SIGNAL(clicked()), &app/*table*/, SLOT(tw.clear(&table, &item)));
        QObject::connect(&btn4, SIGNAL(clicked()), &app, SLOT(quit()));
        
        wgt.show();
        return app.exec();
      }


    Компилятор пишет, что undefuned reference to 'vtable for QTableWidget2'...
      у тебя тут багов довольно много.
      Вот что бросилось в глаза:
      1. не реализованы методы
      ExpandedWrap disabled
            void generate(QTableWidget &, QTableWidgetItem &);
            int calculate(QTableWidget &, QTableWidgetItem &);

      хотя это слоты и они точно должны быть определены.
      2. Прочитай в доках или пример посмотри как пишутся эти функции:
      ExpandedWrap disabled
         QObject::connect(&btn3, SIGNAL(clicked()), &app/*table*/, SLOT(tw.clear(&table, &item)));
          QObject::connect(&btn4, SIGNAL(clicked()), &app, SLOT(quit()));

      3. Проверь что бы при компиляции для класса QTableWidget2 вызывался moc.
      4. В функции main у классов QTableWidget table(3, 3) должен быть задан парент QWidget wgt.

      Добавлено
      еще тут с логикой есть косяки, но пока нужно разобраться с орфографией.
        sploid все 4-е пункта соблюдаются (1ый - если раскоментровать комментарии, но все равно не работает; 2-ой - я записал как в примере из книги Макса Шлее; 3-ий - moc вызывается, ибо там строчка Q_OBJECT; 4-е - это еще зачем?).
          Цитата SectoRz @
          3-ий - moc вызывается, ибо там строчка Q_OBJECT;

          враки. из доки:
          ExpandedWrap disabled
            The moc tool reads a C++ header file.

          а у тебя main.cpp не заголовочный.
            sploid хм. не думаю что митуация изменится, если я помещу класс наследник в ашку, хотя попробовать стоит...
              В хидере тоже никак - 500 ошибок((( ППЦ - научился кутить(((
                Эту тему пора закрывать. В моем коде был вагон и маленькая тележка ошибок - я попытался уменьшить их количество и сейчас думаю создать новую тему - ибо горю желанием расставить все на свои места...
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0295 ]   [ 16 queries used ]   [ Generated: 28.04.24, 15:37 GMT ]