Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.181.21] |
|
Сообщ.
#1
,
|
|
|
Вопрос поставлен! Вот код:
#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'... |
Сообщ.
#2
,
|
|
|
у тебя тут багов довольно много.
Вот что бросилось в глаза: 1. не реализованы методы void generate(QTableWidget &, QTableWidgetItem &); int calculate(QTableWidget &, QTableWidgetItem &); хотя это слоты и они точно должны быть определены. 2. Прочитай в доках или пример посмотри как пишутся эти функции: 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. Добавлено еще тут с логикой есть косяки, но пока нужно разобраться с орфографией. |
Сообщ.
#3
,
|
|
|
sploid все 4-е пункта соблюдаются (1ый - если раскоментровать комментарии, но все равно не работает; 2-ой - я записал как в примере из книги Макса Шлее; 3-ий - moc вызывается, ибо там строчка Q_OBJECT; 4-е - это еще зачем?).
|
Сообщ.
#4
,
|
|
|
Цитата SectoRz @ 3-ий - moc вызывается, ибо там строчка Q_OBJECT; враки. из доки: The moc tool reads a C++ header file. а у тебя main.cpp не заголовочный. |
Сообщ.
#5
,
|
|
|
sploid хм. не думаю что митуация изменится, если я помещу класс наследник в ашку, хотя попробовать стоит...
|
Сообщ.
#6
,
|
|
|
В хидере тоже никак - 500 ошибок((( ППЦ - научился кутить(((
|
Сообщ.
#7
,
|
|
|
Эту тему пора закрывать. В моем коде был вагон и маленькая тележка ошибок - я попытался уменьшить их количество и сейчас думаю создать новую тему - ибо горю желанием расставить все на свои места...
|