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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Динамически создаваемые кнопки  (Прочитано 2406 раз)
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).

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

Извиняюсь если как-то неясно описал проблему, в коментах если что уточню )
« Последнее редактирование: Август 26, 2010, 21:17 от POS_troi » Записан
BRE
Гость
« Ответ #1 : Август 26, 2010, 19:00 »

Посмотри в документации на класс QSignalMapper. Там же есть пример.
Записан
POS_troi
Гость
« Ответ #2 : Август 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 &)));
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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