Russian Qt Forum

Qt => Общие вопросы => Тема начата: Mikhail от Октябрь 18, 2007, 15:51



Название: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 18, 2007, 15:51
Свойство необходимо для выбора в Дизайнере одного из SQL драйверов для плагина работы с базой данных. Тролли пишут что это возможно через QVariant. Кто знает помогите разобраться.
 ???


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: pastor от Октябрь 18, 2007, 17:07
Так разве не получаеться?

Код:
class SomeClass ...
{

    Q_PROPERTY(QStringList property READ property WRITE setProperty)

public:
    void setProperty(const QStringList &priority);
    QStringList property() const;
...
};


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 19, 2007, 08:39
Так разве не получаеться?

Код:
class SomeClass ...
{

    Q_PROPERTY(QStringList property READ property WRITE setProperty)

public:
    void setProperty(const QStringList &priority);
    QStringList property() const;
...
};

Не получается. Компилятор проглатывает, но при старте Дизайнера вылетает ошибка QtCore4.dll


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: pastor от Октябрь 19, 2007, 12:41
Хм, я тут поковырялся Qt Designer.. Поидее падать не должно. Поддержка QStringList есть... Но оказываеться, это не то что вам нужно. Если я не ошибаюсь, вам нужно сделать такое свойство, чтобы можно было производить редактирование значения свойства при помощи комбобокса, так?


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 19, 2007, 12:53
Хм, я тут поковырялся Qt Designer.. Поидее падать не должно. Поддержка QStringList есть... Но оказываеться, это не то что вам нужно. Если я не ошибаюсь, вам нужно сделать такое свойство, чтобы можно было производить редактирование значения свойства при помощи комбобокса, так?

Да именно так. Поддержка QStringList есть.  Компиляция проходит, но Qt Designer падает при старте. Комбобокс должен содержать все действующие SQL драйвера системы. Пользователь должен иметь взможность выбрать из них требуемый.
Какие есть соображения.


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: pastor от Октябрь 19, 2007, 15:00
Чесно говоря идей пока и нету... В коде дизайнера есть вот такой класс ListProperty который создаеть комбобокс с списком значений. Но он предназначен для внутреннего использования, и не связан конкретно нескаким типом.


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Dodge от Октябрь 20, 2007, 01:34
А чем аффтора не устраивает enum?... или поставка виджета будет в бинарях?


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 20, 2007, 09:01
А чем аффтора не устраивает enum?... или поставка виджета будет в бинарях?

enum - перечисление. Задается в *.h файле. Устанавливвает набор значений. На каждой конкретной qt может быть разный набор драйверов SQL. И при чем здесь enum?


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: -QT- от Октябрь 20, 2007, 15:03
QStringList drivers = QSqlDatabase::drivers();
comboBoxDriver->addItems(drivers);

Или это не подходит ?


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 20, 2007, 15:36
QStringList drivers = QSqlDatabase::drivers();
comboBoxDriver->addItems(drivers);

Или это не подходит ?

Не подходит. comboBoxDriver это QComboBox, а разговор идет о Q_PROPERTY некоего QWidget


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Dodge от Октябрь 21, 2007, 11:58
А чем аффтора не устраивает enum?... или поставка виджета будет в бинарях?

enum - перечисление. Задается в *.h файле. Устанавливвает набор значений. На каждой конкретной qt может быть разный набор драйверов SQL. И при чем здесь enum?

хы... я знаю что такое енум, причем тут версия куте? ...если виджет будет собираццо на конечном пк, то зачем делать его универсальным по коду? о_0 ...можно обложить макросами... эффект тот же, гемора имхо меньше.


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: -QT- от Октябрь 21, 2007, 14:33
/****************************************************************************
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** Licensees holding a valid Qt License Agreement may use this file in
** accordance with the rights, responsibilities and obligations
** contained therein.  Please consult your licensing agreement or
** contact sales@trolltech.com if any conditions of this licensing
** agreement are not clear to you.
**
** Further information about Qt licensing is available at:
** http://www.trolltech.com/products/qt/licensing.html or by
** contacting info@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/

#ifndef QTEXTBROWSER_H
#define QTEXTBROWSER_H

#include <QtGui/qtextedit.h>
#include <QtCore/qurl.h>

QT_BEGIN_HEADER

QT_MODULE(Gui)

#ifndef QT_NO_TEXTBROWSER

class QTextBrowserPrivate;

class Q_GUI_EXPORT QTextBrowser : public QTextEdit
{
    Q_OBJECT

    Q_PROPERTY(QUrl source READ source WRITE setSource)
    Q_OVERRIDE(bool modified SCRIPTABLE false)
    Q_OVERRIDE(bool readOnly DESIGNABLE false SCRIPTABLE false)
    Q_OVERRIDE(bool undoRedoEnabled DESIGNABLE false SCRIPTABLE false)
    Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
    Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
    Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks)

public:
    explicit QTextBrowser(QWidget* parent = 0);
    virtual ~QTextBrowser();

    QUrl source() const;

    QStringList searchPaths() const;
    void setSearchPaths(const QStringList &paths);

    virtual QVariant loadResource(int type, const QUrl &name);

    bool isBackwardAvailable() const;
    bool isForwardAvailable() const;
    void clearHistory();

    bool openExternalLinks() const;
    void setOpenExternalLinks(bool open);

    bool openLinks() const;
    void setOpenLinks(bool open);

public Q_SLOTS:
    virtual void setSource(const QUrl &name);
    virtual void backward();
    virtual void forward();
    virtual void home();
    virtual void reload();

Q_SIGNALS:
    void backwardAvailable(bool);
    void forwardAvailable(bool);
    void sourceChanged(const QUrl &);
    void highlighted(const QUrl &);
    void highlighted(const QString &);
    void anchorClicked(const QUrl &);

protected:
    bool event(QEvent *e);
    virtual void keyPressEvent(QKeyEvent *ev);
    virtual void mouseMoveEvent(QMouseEvent *ev);
    virtual void mousePressEvent(QMouseEvent *ev);
    virtual void mouseReleaseEvent(QMouseEvent *ev);
    virtual void focusOutEvent(QFocusEvent *ev);
    virtual bool focusNextPrevChild(bool next);
    virtual void paintEvent(QPaintEvent *e);

#if defined(QT3_SUPPORT)
public:
    QT3_SUPPORT_CONSTRUCTOR QTextBrowser(QWidget *parent, const char *name);
#endif

private:
    Q_DISABLE_COPY(QTextBrowser)
    Q_DECLARE_PRIVATE(QTextBrowser)
    Q_PRIVATE_SLOT(d_func(), void _q_documentModified())
    Q_PRIVATE_SLOT(d_func(), void _q_activateAnchor(const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_highlightLink(const QString &))
};

#endif // QT_NO_TEXTBROWSER

QT_END_HEADER

#endif // QTEXTBROWSER_H

Это то что реально работает в самом QT
поэтому я думаю что трабла зарыта в реализации, а не объявлении.
Что подтверждает компилятор при сборке Вашего кода (как Вы сказали он компилируется)


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: Mikhail от Октябрь 21, 2007, 14:51
-=QT=-
Спасибо уже дошел до этого. Ты прав.
Задумка была несколько иная. Наверно не совсем правильно поставил вопрос.
Хотелось бы иметь некое перечислимое свойство, enum для которого можно было бы динамически изменять(например в соответствии с имеющимися в наличии SQL драверами), что бы для него вызывался редактор QComboBox. Чувствую, что это недостижимо, но хотеть не вредно.
Спасибо всем за дискуссию


Название: Re: Как создать Q_PROPERTY типа QStringList
Отправлено: -QT- от Октябрь 21, 2007, 15:12
-=QT=-
Спасибо уже дошел до этого. Ты прав.
Задумка была несколько иная. Наверно не совсем правильно поставил вопрос.
Хотелось бы иметь некое перечислимое свойство, enum для которого можно было бы динамически изменять(например в соответствии с имеющимися в наличии SQL драверами), что бы для него вызывался редактор QComboBox. Чувствую, что это недостижимо, но хотеть не вредно.
Спасибо всем за дискуссию


Все равно непонимаю, пока КАК звучит конечная задача. Ведь путей решения может быть несколько.
Если не трудно объясните конечную цель.