Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Qt слоты + undefined reference

18K
30 декабря 2009 года
logree
102 / / 27.09.2008
Задача: есть список, есть кнопка, нужно чтобы по нажатию на кнопку элементы списка сортировались.
Код:
/*
  Use Qt version 4.6
 */
#include <QtGui/QApplication>
#include "widget.h"

class SortSlot : public QObject {
    Q_OBJECT
public:
    QListWidget * List;
public:
    SortSlot() {
        QObject::QObject();
    }
public slots:
    void sortit();
};
void SortSlot::sortit() {
    this->List->sortItems();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    w.setWindowTitle("List Sort");                           // задаём имя окна
    QLabel hello;                                            // создаём Label
    hello.setText("Press Button to Sort");                   // в Label вспомогатльный текст

    QListWidget * SortList = new QListWidget;                // создаём список
    QStringList elements;                                    // создаём набор строк которые будут использоваться как эл-ты списка
    elements << "Anton" << "Piter" << "Jon";                 // заполняем набор строк
    SortList->addItems(elements);                            // добавляем элементы в список

    QPushButton* knopka = new QPushButton("Sort");           // создаём кнопку

    SortSlot * s = new SortSlot;
    s->List = SortList;
    QObject::connect(knopka,SIGNAL(clicked()),s,SLOT(sortit()));     // соединяем сигнал со слотом

    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(&hello);
    layout->addWidget(knopka);
    layout->addWidget(SortList);
    w.setLayout(layout);

    hello.show();
    SortList->show();
    knopka->show();    
    return a.exec();
}

Вот тут
 
Код:
SortSlot() {

undefined reference to 'vtable for SortSlot' что с этим делать??? подскажите! вроде всё правильно написано.
Да и как сделать чтобы не так каряво передавать объект List?
260
30 декабря 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: logree
Задача: есть список, есть кнопка, нужно чтобы по нажатию на кнопку элементы списка сортировались.
Код:
/*
  Use Qt version 4.6
 */
#include <QtGui/QApplication>
#include "widget.h"

class SortSlot : public QObject {
    Q_OBJECT
public:
    QListWidget * List;
public:
[COLOR="Red"]    SortSlot() {
        QObject::QObject();
    }[/COLOR]
public slots:
    void sortit();
};
void SortSlot::sortit() {
    this->List->sortItems();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    w.setWindowTitle("List Sort");                           // задаём имя окна
    QLabel hello;                                            // создаём Label
    hello.setText("Press Button to Sort");                   // в Label вспомогатльный текст

    QListWidget * SortList = new QListWidget;                // создаём список
    QStringList elements;                                    // создаём набор строк которые будут использоваться как эл-ты списка
    elements << "Anton" << "Piter" << "Jon";                 // заполняем набор строк
    SortList->addItems(elements);                            // добавляем элементы в список

    QPushButton* knopka = new QPushButton("Sort");           // создаём кнопку

    SortSlot * s = new SortSlot;
    s->List = SortList;
    QObject::connect(knopka,SIGNAL(clicked()),s,SLOT(sortit()));     // соединяем сигнал со слотом

    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(&hello);
    layout->addWidget(knopka);
    layout->addWidget(SortList);
    w.setLayout(layout);

    hello.show();
    SortList->show();
    knopka->show();    
    return a.exec();
}

Вот тут
 
Код:
SortSlot() {

undefined reference to 'vtable for SortSlot' что с этим делать??? подскажите! вроде всё правильно написано.
Да и как сделать чтобы не так каряво передавать объект List?



Что вы сим пытались добиться?

260
30 декабря 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: logree
Да и как сделать чтобы не так каряво передавать объект List?



Отнаследоваться от QListWidget с добавлением слота например.

18K
30 декабря 2009 года
logree
102 / / 27.09.2008
Я там думал что нужно вызвать конструктор родительского класа явно, но уже понял что это не то, можно конечно и без конструктора но тогда та-же ошибка возникает тут
 
Код:
class SortSlot : public QObject {

Цитата:
Отнаследоваться от QListWidget с добавлением слота например.


вот это до меня сразу не дошло сейчас попробую.

вопрос открыт (qmake не помогает)

260
30 декабря 2009 года
Ramon
1.1K / / 16.08.2003
 
Код:
SortSlot() {
        QObject::QObject();
    }


Это [COLOR="Red"]не вызов[/COLOR] конструктора QObject.
И вынесите определение класса в отдельный хашник.
18K
30 декабря 2009 года
logree
102 / / 27.09.2008
Цитата:
Это не вызов конструктора QObject.
И вынесите определение класса в отдельный хашник.
Сегодня 19:49


давно не писал на С++ :)

в общем я переписал и всё тоже самое опять эта ошибка

Код:
class MyQListWidget : public QListWidget {
    Q_OBJECT
public slots:
    void sortAll();                       // объявляем слот
};
void MyQListWidget::sortAll() {           // определяем слот
    this->sortItems();                    // вызов метода сортировки списка
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);                              // qt приложение
    Widget w;                                                // виджет главного окна

    w.setWindowTitle("List Sort");                           // задаём имя окна
    QLabel hello;                                            // создаём Label
    hello.setText("Press Button to Sort");                   // в Label вспомогатльный текст

    MyQListWidget * SortList = new MyQListWidget;            // создаём список
    QStringList elements;                                    // создаём набор строк которые будут использоваться как эл-ты списка

    elements << "Jon" << "Piter" << "Anton";                 // заполняем набор строк

    SortList->addItems(elements);                            // добавляем элементы в список

    QPushButton* knopka = new QPushButton("Sort");           // создаём кнопку

    QObject::connect(knopka,SIGNAL(clicked()),SortList,SLOT(sortAll()));     // соединяем сигнал clicked() кнопки со слотом sortit()

    QVBoxLayout* layout = new QVBoxLayout;                    // создаём лейоут
    layout->addWidget(&hello);                                // помещаем в него элементы формы:
    layout->addWidget(knopka);                                // лэйбл, кнопку и список
    layout->addWidget(SortList);
    w.setLayout(layout);                                      // устанавливаем лэйоут для окна

    w.show();
    hello.show();                                             // плказываем элементы
    SortList->show();
    knopka->show();    
    return a.exec();
}
260
30 декабря 2009 года
Ramon
1.1K / / 16.08.2003
Вы вынесли определение класса в отдельный хашник? Иначе никаких моков вы не получите.
18K
30 декабря 2009 года
logree
102 / / 27.09.2008
Цитата:
Вы вынесли определение класса в отдельный хашник? Иначе никаких моков вы не получите.



Спасибо большое :) Заработало.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог