Russian Qt Forum

Qt => Общие вопросы => Тема начата: POS_troi от Август 26, 2010, 18:55



Название: [Решено]Динамически создаваемые кнопки
Отправлено: POS_troi от Август 26, 2010, 18:55
Пишу программку, смысл её в том что парсится xml файл в котором прописаны пути к программам которые должны запускаться по нажатию кнопки.

Код:
<Programm name="Gedit" patch="/usr/bin/gedit" icon="gedit.ico" title="Запускает текстовый редактор">

Каждую кнопку создаю сразу после получения очередных данных с xml

Код:
void MainWindow::ReadXml()
{

    QString title,ico,patch,name;
    QFile file("a.xml");
    file.open(QIODevice::ReadOnly);

    QXmlStreamReader XmlRead(&file);
    while(!XmlRead.atEnd())
    {
            XmlRead.readNext();
            if (XmlRead.isStartElement())
               if (XmlRead.name()=="Programm")
              {
                    title   =      XmlRead.attributes().value("title").toString();
                    ico     =      XmlRead.attributes().value("icon").toString();
                    patch   =      XmlRead.attributes().value("patch").toString();
                    name    =      XmlRead.attributes().value("name").toString();

                    ShowElements(name, ico, title, patch);

              }
    }

  
}

void MainWindow::ShowElements(QString name, QString icon, QString title, QString patch)
{
  
    QPushButton *button = new QPushButton(name,this);
    QObject::connect(button,SIGNAL(clicked()),this,SLOT(StartProgramm(Сюда нужно передать параметр)));
    button->show();

}


Все работает отлично за исключением обработки "Слота" кнопки, то-есть у меня есть функция
Код:
void MainWindow::StartProgramm(QString ProgramPatch)
{

    QProcess *process = new QProcess();
    process->start(ProgramPatch);
    
}
Которая и должна была послужить "слотом" для кнопки но как я понял в слот нельзя напрямую передать параметр (в моем случае patch из xml).

Вопрос - как реализовать динамическое создание слотов? Я почитал доки но что-то не совсем въехал в технологию.

Извиняюсь если как-то неясно описал проблему, в коментах если что уточню )


Название: Re: Динамически создаваемые кнопки
Отправлено: BRE от Август 26, 2010, 19:00
Посмотри в документации на класс QSignalMapper. Там же есть пример.


Название: Re: Динамически создаваемые кнопки
Отправлено: POS_troi от Август 26, 2010, 21:16
2BRE

Спасибо за наводку, сделал так

Код:
QSignalMapper * signalMapper = new QSignalMapper(this);
    QPushButton *button[buttons];


    button[buttons] = new QPushButton(name,this);
    signalMapper->setMapping(button[buttons],QString(patch));
    connect(button[buttons], SIGNAL(clicked()),signalMapper, SLOT (map()));
    connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(StartProgramm(const QString &)));