Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: silart от Сентябрь 08, 2010, 12:25



Название: Реализация класса в библиотеке
Отправлено: silart от Сентябрь 08, 2010, 12:25
Добрый день!
Возникла такая проблема. В общем нужно класс Qt упаковать в библиотеку. Библиотека в данном случае статическая. Очень хочется наиболее часто используемые классы поместить в библиотеку, и использовать эту библиотеку в многих проектах. В качестве классов будут выступать диалоги, отдельные виджеты, ну и просто наследники QObject.
Попалась мне на глаза статья на эту тему: http://erudenko.com/wordpress/?p=100 (http://erudenko.com/wordpress/?p=100)

Но мне не нравятся уродливые макросы Q_DECLARE_PRIVATE, Q_D и т. д. Да и еще такой подход не решает все проблемы.

К примеру, если нужно скрыть класс диалога (имеющий привытные слоты, видеть которые клиенту совсем не обязательно), то данный метод не все скрывает.

Код:
class RefDialog : public QDialog
{
Q_OBJECT
private:
// Ui::RefDialog ui;
Ui::RefDialog* ui;

private slots:
void OnButtonInsert();
void OnButtonDelete();
void OnButtonSubmit();
void OnButtonClose();

public:
RefDialog(const QString& caption, QWidget *parent = 0, Qt::WFlags flags = 0);
void setModel(QSqlTableModel* model);
void hideColomn(int colomn);
void showColomn(int colomn);
~RefDialog();
};


Медоды
   void OnButtonInsert();
   void OnButtonDelete();
   void OnButtonSubmit();
   void OnButtonClose();

останутся видимыми всем, что не очень хочется.


Название: Re: Реализация класса в библиотеке
Отправлено: Авварон от Сентябрь 08, 2010, 13:04
есть макрос Q_PRIVATE_SLOT который позволяет реализовать слот в Private-классе.
Если вам не нравятся макросы, то реализуйте pimpl ручками. Или забейте на него вовсе