Dzień dobry, przychodzę z problemem który mnie wyprowadził już z równowagi. Próbowałem na wszystkie znane mi sposoby ale nie da rady... Mam bazę danych w niej tabela folders(int folderid, string name). Wczytuję foldery utworzone wcześniej z danych z DB i one są pushbuttonami. Po kliknięciu takiego buttona będę tam dalej kod stukał ale chodzi o to że po kliknięciu nie może mi odróżnić który to. Dlatego zdecydowałem się na użycie setObjectName()
i później w slocie sender()->objectName();
Czyli mam QStringa
i tutaj jest problem, daje go jako filtr do QSqlTableModel
ale niestety nie działa (bawiąc się z qDebugiem normalnie pokazuje mi btnName
ale już jak ustawie go jako filtr wiedząc że w DB mam tam taki rekord to nie znajduje. Proszę o pomoc :/
button dodający nowy folder
void Protocols::on_btnadd_clicked()
{
/// if jesteśmy w folderach
if((ui->nameln->text() == "Folder name")||(ui->nameln->text().isEmpty()))
{
foldersmodel = dbManager->getFoldersTableModel();
int x = foldersmodel->rowCount();
int b=1;
for (int i=0; i<x;)
{
if(dbManager->getNameFromArray(i)=="New folder") b++;
if(dbManager->getNameFromArray(i)== "New folder "+QString::number(b)) b++;
// else continue;
i++;
}
if(b==1) createFolder("New folder",true);
else createFolder("New folder "+QString::number(b),true);
}
else
createFolder(ui->nameln->text(),true);
ui->nameln->clear();
}
slot od klikniętego folderu
void Protocols::onBtnFolderClicked(bool checked)
{
Q_UNUSED(checked);
hideAllWidgets(lay);
///wyswietl droge powrotną (jakas szczałka do tyłu czy coś)
QString btnName = sender()->objectName();
///dobieranie nazwy do id folderu -> wyswietl jego zawartosc
//foldersmodel->setFilter("name="+btnName);
//qDebug()<< foldersmodel->record(0).value("folderid").toInt();
}
createfolder()
void Protocols::createFolder(QString name, bool toDatabase)
{
Folder *fold = new Folder(nullptr,name);
lay->addLayout(fold->getFolder(),rowcounter,columncounter);
ui->scrollArea->setWidget(ui->scrollgrid);
ui->scrollgrid->setLayout(lay);
columncounter++;
if(columncounter==4)
{
columncounter=0;
rowcounter++;
}
justcounter++;
connect(fold->getBtn(), &QPushButton::clicked, this, &Protocols::onBtnFolderClicked);
///czy dodać go do database?
if(toDatabase)
dbManager->addFolder(name);
}
w konstruktorze do zrobienia tych buttonów z DB
foldersmodel = dbManager->getFoldersTableModel();
int x = foldersmodel->rowCount();
for (int i=0; i<x;i++)
{
createFolder(dbManager->getNameFromArray(i));
}
}
menadżer DB
QSqlTableModel *DbManager::getFoldersTableModel()
{
QSqlTableModel *foldersmodel = new QSqlTableModel(this,m_db);
foldersmodel->setTable("folders");
foldersmodel->select();
return foldersmodel;
}
oraz sama klasa folder
#include "folder.h"
Folder::Folder(QObject *parent, QString name)
{
folderbtn = new QPushButton;
folderbtn->setIcon(QIcon(":/images/images/folder.jpg"));
folderbtn->setMaximumSize(120,120);
folderbtn->setMinimumSize(120,120);
folderbtn->setIconSize(QSize(120,120));
folderlbl = new QLabel;
folderlbl->setAlignment(Qt::AlignHCenter);
folderlbl->setText(name);
folderlbl->setMaximumSize(120,20);
folderlbl->setMinimumSize(120,20);
folderbtn->setObjectName(name);
qDebug()<<folderbtn->objectName()<<name;
layout = new QVBoxLayout;
layout->addWidget(folderbtn);
layout->addWidget(folderlbl);
layout->SetFixedSize;
dbMng = new DbManager;
}
QVBoxLayout *Folder::getFolder()
{
return layout;
}
QPushButton *Folder::getBtn()
{
return folderbtn;
}