Russian Qt Forum

Qt => Общие вопросы => Тема начата: Trademaster от Август 21, 2013, 08:57



Название: База данных и qt
Отправлено: Trademaster от Август 21, 2013, 08:57
Ребят ,всем привет. Я тут подумал ,а возможно ли в qt реализовать такую штуку.
Предположим ,я хочу ,чтоб в моей базе данных хранились данные о под.программах моей программы. Это путь к екзешнику (для запуска) и путь к иконке (для меню основной программы) .
Возможно ли реализовать то , что qt будет проверять всю базу данных ,если там есть утилиты(например утилита калькулятора ,это путь к екзешнику калькулятора и его иконке) - он их добавит в меню(в меню при нажатии на иконку будет запускаться екзешник) ,если их нет ,разумеется нет.
И если да ,то какую базу данных для этого лучше юзать (нужна самая простая ,я раньше с бд не работал почти)


Название: Re: База данных и qt
Отправлено: voral от Август 21, 2013, 09:16
Возможно ли реализовать то , что qt будет проверять всю базу данных ,если там есть утилиты(например утилита калькулятора ,это путь к екзешнику калькулятора и его иконке) - он их добавит в меню(в меню при нажатии на иконку будет запускаться екзешник) ,если их нет ,разумеется нет.
Возможно. Но "проверять" будет не Qt, а ваша программа. Можно при помощи классов Qt.
Проверять ни чего не надо. Т.к. ваша же программа и будет доблять в базу все пункты, которые нужны. Соответственно все, что в базе (а точнее даже в одной таблице) надо добавить в меню

И если да ,то какую базу данных для этого лучше юзать (нужна самая простая ,я раньше с бд не работал почти)
Абсолютно без разницы. Для данной задчаи вообще можно обойтись без БД. Можно хранить хоть в реестре, хоть в ini файле, хоть в файле с собственной структурой......


Название: Re: База данных и qt
Отправлено: lex_newton от Август 21, 2013, 17:55
если хочется именно базу данных - то SQLite (в Qt работает из коробки).


Название: Re: База данных и qt
Отправлено: Trademaster от Август 21, 2013, 22:45
Возможно ли реализовать то , что qt будет проверять всю базу данных ,если там есть утилиты(например утилита калькулятора ,это путь к екзешнику калькулятора и его иконке) - он их добавит в меню(в меню при нажатии на иконку будет запускаться екзешник) ,если их нет ,разумеется нет.
Возможно. Но "проверять" будет не Qt, а ваша программа. Можно при помощи классов Qt.
Проверять ни чего не надо. Т.к. ваша же программа и будет доблять в базу все пункты, которые нужны. Соответственно все, что в базе (а точнее даже в одной таблице) надо добавить в меню

И если да ,то какую базу данных для этого лучше юзать (нужна самая простая ,я раньше с бд не работал почти)
Абсолютно без разницы. Для данной задчаи вообще можно обойтись без БД. Можно хранить хоть в реестре, хоть в ini файле, хоть в файле с собственной структурой......

Если не тяжело ,можете хоть примерно объяснить реализацию ? Если не сложно ,то вообще в скайпе . Просто проблема в том ,что я не хочу ,чтоб МОЯ ПРОГРАММА добавляла что - то в бд :(( Я это попытался сделать в коде ,в итоге все вообщем-то работало ,но довольно криво. Программа по сути набор утилит ,которые к ней устанавливаются отдельно и хочется ,что бы при установке утилиты ,в бд \ еще что -то заносились данные о екзешнике утилиты и иконке ,а моя программа при запуске просто брала все иконки из бд ,соединяла все иконки с их екзешниками и в итоге при нажатии на иконку запускался екзешник. Т.е моя программа ничего не заносит в бд ,лишь берет от туда (а в бд все данные заносятся при установке утилиты). Вот реализация подобного мне не ясна :(


Название: Re: База данных и qt
Отправлено: Bepec от Август 22, 2013, 06:55
Ну во 1 - под какую ОС хотите?

Хотя, вроде по тексту вы о винде говорите :)

Алгоритм:
1) При установке менеджера в реестр добавляется ключ со значением пути к базе данных.
2) Все программы, которые хотят записаться в пионеры базу берут путь из реестра и добавляют свои значения при, допустим, первом запуске/установке.
3) Менеджер просто открывает БД и считывает пути к программам и дополнительную информацию. Допустим путь к файлу запуска, краткое описание.
4) Потом проходится по списку путей, тырит из файлов иконки и создаёт необходимое количество графических элементов с данными. Аля кнопка с иконкой и названием программы.
5) Далее просто при нажатии определяем клавишу, которая была нажата и запускаем необходимое приложение.


Название: Re: База данных и qt
Отправлено: voral от Август 22, 2013, 07:55
Если не тяжело ,можете хоть примерно объяснить реализацию ? Если не сложно ,то вообще в скайпе . Просто проблема в том ,что я не хочу ,чтоб МОЯ ПРОГРАММА добавляла что - то в бд :(( Я это попытался сделать в коде ,в итоге все вообщем-то работало ,но довольно криво. Программа по сути набор утилит ,которые к ней устанавливаются отдельно и хочется ,что бы при установке утилиты ,в бд \ еще что -то заносились данные о екзешнике утилиты и иконке ,а моя программа при запуске просто брала все иконки из бд ,соединяла все иконки с их екзешниками и в итоге при нажатии на иконку запускался екзешник. Т.е моя программа ничего не заносит в бд ,лишь берет от туда (а в бд все данные заносятся при установке утилиты). Вот реализация подобного мне не ясна :(
Одна из возможных реализаций.
Каждая утилита при установке. Записывается себя:
Код:
QSettings settings("youorgname", "yoursystemname");
settings.setValue("ToolOne/bin", "c:\PathToTool\toolone.exe");
settings.setValue("ToolOne/icon", "c:\PathToTool\toolone.png");
settings.setValue("ToolOne/title", "Первая утилита");
youorgname - имя ваше "организации"
yoursystemname - имя вашей программы
ToolOne - имя подпрограммы

ваша супер программа читает все это и добавляет в меню:
Код:
QSettings settings("youorgname", "yoursystemname");
QStringList tools = settings.childGroups();
foreach (const QString& tool, tools)
{
    settings.beginGroup(tools);
    QAction *ac = new QAction(QIcon(settings.value("icon","defaultIconFile")),settings.value("title","Noname"),yourmenu);
    ac->setData(settings.value("bin",""));
    connect(ac,SIGNAL(triggered()),this,SLOT(onRun()));
    yourmenu->addAction(ac);
    settings.endGroup();
}
Далее слот запускающий
Код:
void onRun()
{
    QObject* obj=QObject::sender();
    if (QAction *ac=qobject_cast<QAction *>(obj))
    {
         qDebug()<< ac->data().toString();  // здесь путь к вашей подпрограмме
    }
}

Сам не тестил - писал прям здесь. Но принцип должен быть понятен.


Название: Re: База данных и qt
Отправлено: voral от Август 22, 2013, 08:11
На всякий случай: я привел только черновик кода. Вы в сеттингах можете хранить и другую информацию. Тогда список подпрограмм можно объеденить в какую либо группу. По умолчанию QSettings пишет так как "принято" в системе (в винде в реестр, на маке в XML на линуксах в ini). Но вы можете, при желании, четко задать ini файл.

И, конечно же, прописывать в коде прямым текстом путь к файлам - зло. Так, что позаботьтесь и об этом.