Russian Qt Forum
Ноябрь 27, 2024, 03:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Уникальный, жестко привязанный ID, для каждого контрола.  (Прочитано 4222 раз)
niXman
Гость
« : Февраль 23, 2010, 22:23 »

Всем хай!

Есть задумка, реализовать интерфейс программы таким образом, чтоб была возможность, для любого контрола использовать определенные правила/ресурсы для прорисовки.
Т.е. к примеру, на одной форме, QPushButton`ы должны иметь возможность выглядеть по разному.
Ресурсы хранятся в БД в виде таблиц стилей:
Код
INI
--------------------------
| unique_ID | QByteArray |
--------------------------
 
Пока рассматриваю такой вариант:
Каждому контролу присвоить уникальный ID, и, основываясь на нем, получать нужный для его прорисовки ресурс.

Но тут некоторые сложности.
Каким образом генерировать ID, с учетом того, что интерфейс будет расширяться?

В общем, интересно ваше мнение.
Спасибо за внимание.
Записан
SABROG
Гость
« Ответ #1 : Февраль 24, 2010, 03:08 »

Можно через QUuid QUuid::createUuid ()   [static]
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Февраль 24, 2010, 06:18 »

niXman, у меня подобная задача, пока не решённая. Надо в БД хранить содержимое графич.сцены. Тоже в раздумьях.

В твоём случае, можно UI-файл хранить в БД и связанный именно с этим UI-файлом, файл стиля. Т.е. прям в виде BLOB'а.
Записан

Юра.
hackoff
Гость
« Ответ #3 : Февраль 24, 2010, 08:55 »

Думаю идея должна пойдоти. Здесь я наследуюсь от QPushButton и добавляю методы     void setConnection(connectionTCP * connection) и
    connectionTCP* getConnection() с помощью которых можно добавить и получить указатель  на объекты connectionTCP. Думаю если заменить указатели на int, то можно каждому объекту ставить в соответствие свой ID.
mypushbutton.h
Код:
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include <QPushButton>
#include <QMutex>
#include "connectiontcp.h"
class myPushButton : public QPushButton
{
    Q_OBJECT;
public:
    myPushButton();
    void setConnection(connectionTCP * connection);
    connectionTCP* getConnection();

public slots:
    void setNamePush(QString name);
private:
    QMutex mutex;
    connectionTCP * pConnection;
    void focusInEvent(QFocusEvent * event);
    void focusOutEvent(QFocusEvent * event);

};

#endif // MYPUSHBUTTON_H


mypushbutton.cpp
Код:
#include "mypushbutton.h"
#include <QDebug>
#include <QIcon>
#include <QPixmap>

myPushButton::myPushButton()
    :QPushButton()
{
setFlat(true);
setIcon(QIcon(":/mycomputer.ico"));
setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed);
}

void myPushButton::setNamePush(QString name){
    setText(name);
}

void myPushButton::focusInEvent(QFocusEvent *event){
    setFlat(false);
    setMinimumSize(minimumSize()+QSize(0,100));
}

void myPushButton::focusOutEvent(QFocusEvent *event){
    setFlat(true);
    setMinimumSize(minimumSize()-QSize(0,100));
}

void myPushButton::setConnection(connectionTCP *connection){
    pConnection=connection;
}

connectionTCP* myPushButton::getConnection(){
    return pConnection;
}

хотя метод наверное относится к методам: "Почесать ухо, просунув руку через коленку"...
« Последнее редактирование: Февраль 24, 2010, 08:57 от hackoff » Записан
waster
Гость
« Ответ #4 : Март 08, 2010, 18:00 »

QAction::setData() или

bool QObject::setProperty( const char* name, const QVariant& value );

список свойств пихаем в отдельный файл и когда нужен новый контрол, тупо добавляем в конец файла новый "ID_CONTROL_newname new_№".

В принципе, каждому элементу списку можно сделать rand().

name тоже держим в отдельном файле соответствия имен с некими константами, написанными крупными буквами.

Потом пишем функции вида getControlIDByName(), getControlNameByID(), getControlPixmapByID(), etc и активно их юзаем вместо объектов самих контролов.

В идеале ещё можно создать глобальный менеджер таких объектов...

PS. На Маке это всё сделано уже в самой системе: каждый контрол уже имеет своё уникальный номер, надо лишь сделать обёртку.
Записан
waster
Гость
« Ответ #5 : Март 08, 2010, 18:03 »

Ну вот, конкретно QPushButton'ы хорошо Style Sheet'ся. Т.е. им перед показом окна можно нагрузить длинную строку из базы данных, которая полностью задаст их внешний вид.

Но Style Sheet не всегда удобно на 100% в других местах.
Записан
niXman
Гость
« Ответ #6 : Март 08, 2010, 21:46 »

waster, спасибо!
это лучший вариант!

вопрос закрыт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.094 секунд. Запросов: 23.