crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QList не "переносится" из плагина
gigabyte
  опции профиля:
сообщение 9.8.2009, 21:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 9.8.2009
Пользователь №: 992

Спасибо сказали: 2 раз(а)




Репутация:   1  


Здравствуйте уважаемые знатоки. Опять же о тонкостях Qt(MinGW + Qt 4.5.1 + Eclipse + Qt Integration)
До этого момента использовал Qt plugin непосредственно т.е. QPluginLoader->instance() теперь же использую для создания компонентов фабрику т.е.
WidgetFactory = QPluginLoader->instance();
WidgetFactory->newInstance()

Но тут появилась проблема, до того как перешел на использование фабрики в класс выглядел следующим образом:
class tableview : public QTableView, public ViewInterface
{
    Q_OBJECT
    Q_INTERFACES(ViewInterface)
public:
    tableview(QWidget *parent = 0);
    ~tableview();

    void setPluginParameters(QMap<QString,QVariant> params);
    QString getViewName() const;
    QString getViewDesc() const;

    /*Commands for passing SQL and other data*/
    QVariant* getViewCmd() const;
    void setViewCmd(const QVariant *viewCmd);
    QWidget* acquireWidget() const;

    /*Universal UI commands*/
    void uiButtons(QList<int> btns);
//    QList<int>* uiButtons() const;
    bool invoke_uiButton(int btn) const;
private slots:
    void filterBtnClicked(int logicalIndex);
private:
    TVtableheader * header;
    QVariant * cmd;
    QSqlDatabase *db;
    CoreInterface *Core;
    QList<int>* uiBtns;
    void getCaptions();
    void translateModel();
    QMap<QString,QString> *Captions;
    QString *view;
    QSqlQueryModel *model;

};

обратите внимание на метод void uiButtons(QList<int> btns); - метод интерфейса ViewInterface.
Значит до использования фабрики этот метод работал нормально - т.е. возвращал Список идентификаторов кнопок которые следует отображать,
сейчас же он возвращает пустой список.
В чем может быть проблема?
P.S. Как видите раньше использовалась функция возвращающая указатель на список но сейчас заменил на процедуру так как думал что проблема в указателях. Но этот трюк также не проходит
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
gigabyte
  опции профиля:
сообщение 10.8.2009, 10:47
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 9.8.2009
Пользователь №: 992

Спасибо сказали: 2 раз(а)




Репутация:   1  


Разобрался, заменил в коде который вызывает плагин приведение типов:
ViewInterface* interface = (ViewInterface *)qvariant_cast<QObject *>(obj);

на
ViewInterface* interface = qobject_cast<ViewInterface *>(qvariant_cast<QObject *>(obj));

P.S. Очень уж Qt щепетильно относится к привидению типов <_< Delphi в этом смысле более лоялен к кодировщику
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.8.2009, 10:49
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(gigabyte @ 10.8.2009, 11:47) *
P.S. Очень уж Qt щепетильно относится к привидению типов <_< Delphi в этом смысле более лоялен к кодировщику

Ошибки во время компиляции легче найти и исправить, чем ошибки во время выполнения! Тем более, логические ошибки! ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 9:37