Название: Создание меню[Решено]
Отправлено: Trademaster от Август 26, 2013, 23:08
Ребята ,хочу создать менюшку. Смотрите ,есть база данных ,в ней в каждом строке есть 2 столбца ,1 строка - это путь к иконке программы , 2 - это путь к екзешнику программы. Основная программа (по сути просто меню) берет все иконки из базы данных и выводит их на экран. Цель : что бы при нажатии на иконку запускался екзешник ,который этот иконке соответствует . Реализация мне не ясна ,может вы поможете?
Название: Re: Создание меню
Отправлено: gil9red от Август 27, 2013, 00:00
Создать QListWidget, поменять его ViewMode на QListView::IconMode После заполняете QListWidget Цель : что бы при нажатии на иконку запускался екзешник ,который этот иконке соответствует Обрабатываете нужный сигнал QListWidget'a, например clicked(), подключая его к слоту, который и запустит выбранную прогу :) Прогу запускаете через QProcess Если именно меню, тогда выбираем QMenu :)
Название: Re: Создание меню
Отправлено: Trademaster от Август 27, 2013, 01:06
описанное уже реализовано ,почти. Не знаю как подключить иконку к тому ,что запустит соответствующую ей прогу. Вот исходники: #include "widget.h" #include <QDir> #include <QString> #include <QDebug> #include <QGridLayout>
void calcRows();
int dir = 0;
Widget::Widget(QWidget *parent) : QWidget(parent) { sdb = QSqlDatabase::addDatabase("QSQLITE"); sdb.setDatabaseName("D:/Programming/release/FuOrgProjectFirstRelease/myDB.sqlite"); sdb.open(); QSqlQuery a_query; if(sdb.isOpen()) { qDebug() << "Yeah"; } else { qDebug() << "noob"; qDebug() << sdb.lastError().text(); } QString str = "SELECT * FROM FuOrg"; a_query.exec(str); QSqlRecord rec = a_query.record(); QString addressIcon; QString addressExe; int i = 0; while(a_query.next()) { i++; } QString exeFile[i]; QString icoFile[i]; int numeric=0; qDebug() << i; a_query.first(); a_query.previous(); while(a_query.next()) { exeFile[numeric] = a_query.value(rec.indexOf("addressExe")).toString(); icoFile[numeric] = a_query.value(rec.indexOf("addressIcon")).toString(); numeric++; } numeric=0;
testWidgetList = new QListWidget(); testWidgetList->setViewMode(QListView::IconMode); testWidgetList->setResizeMode(QListView::Adjust); testWidgetList->setDragEnabled(false); while (numeric < i) { testItemWidget = new QListWidgetItem(QIcon(icoFile[numeric]) , QString(""), testWidgetList); testWidgetList->addItem(testItemWidget); testItemWidget->setData(numeric,""); numeric++; } QGridLayout *testlay = new QGridLayout; testlay->addWidget(testWidgetList); setLayout(testlay); setWindowTitle(tr("Fuorg")); }
Widget::~Widget() { }
Название: Re: Создание меню
Отправлено: gil9red от Август 27, 2013, 07:12
// widget.h ... private slots: void itemDoubleClicked(QListWidgetItem *item);
// widget.cpp Widget::Widget(QWidget *parent) : QWidget(parent) { sdb = QSqlDatabase::addDatabase("QSQLITE"); sdb.setDatabaseName("D:/Programming/release/FuOrgProjectFirstRelease/myDB.sqlite"); sdb.open(); QSqlQuery a_query; if(sdb.isOpen()) { qDebug() << "Yeah"; } else { qDebug() << "noob"; qDebug() << sdb.lastError().text(); } QString str = "SELECT * FROM FuOrg"; a_query.exec(str); QSqlRecord rec = a_query.record();
testWidgetList = new QListWidget(); testWidgetList->setViewMode(QListView::IconMode); testWidgetList->setResizeMode(QListView::Adjust); testWidgetList->setDragEnabled(false);
// заполняем QListWidget while(a_query.next()) { QString addressExe = a_query.value(rec.indexOf("addressExe")).toString(); QString addressIcon = a_query.value(rec.indexOf("addressIcon")).toString();
QListWidgetItem *newItem = new QListWidgetItem(QIcon(addressIcon), QString("")); newItem->setData(32, addressExe); // сохраняем путь к ехе
testWidgetList->addItem(newItem); }
// подключаем сигнал connect(testWidgetList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(itemDoubleClicked(QListWidgetItem)));
QGridLayout *testlay = new QGridLayout; testlay->addWidget(testWidgetList); setLayout(testlay); setWindowTitle(tr("Fuorg")); }
void Widget::itemDoubleClicked(QListWidgetItem *item) { QString pathExe = item.data(32).toString(); // получаем путь к ехе QProcess::startDetached(pathExe); }
Название: Re: Создание меню
Отправлено: Trademaster от Август 27, 2013, 08:03
Система мне понятна. Спасибо за помощь. P.S Ошибки в коде: connect(testWidgetList, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(itemDoubleClicked(QListWidgetItem))); // в конце к QlistWidgetItem нужно добавить * ,иначе ошибка. QString pathExe = item.data(32).toString(); // нужно юзать item->data(32)
Название: Re: Создание меню
Отправлено: gil9red от Август 27, 2013, 08:08
Я ж писал код тут же, вот и мог где-то недоглядеть, где-то ошибиться :)
Название: Re: Создание меню
Отправлено: Trademaster от Август 27, 2013, 08:11
да к тебе притензий ноль ,я просто малоли кому-то будет нужно ,вот сразу описал проблемы :))
|