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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: динамически создавать виджет.  (Прочитано 5435 раз)
izoomer
Гость
« : Ноябрь 05, 2006, 22:19 »

Как такое сделать в qt 4.2. Linux. ?
Читаю оглавление директории. Требуется по количеству файлов в прочитаном каталоге (не постоянное количество файлов, может варьироваться) создавать столько же кнопок и на каждую кнопку определить сигнал на выполнение именно того файла с которого создана кнопка. Вопрос именно в динамическом создании неопределенного количества кнопок (или других виджетов) и каждой со своим слотом.
Спасибо.
Записан
Dendy
Гость
« Ответ #1 : Ноябрь 05, 2006, 22:32 »

Можно сделать один слот для всех кнопок. А от кого пришёл сигнал получать через QObject::sender():

Код:
QString file_name = ...;
QPushButton * button = new QPushButton( ... );
button->setProperty( "_file_name", file_name );
connect( button, SIGNAL(clicked()), SLOT(button_clicked()) );
...
void MyClass::button_clicked()
{
  QString file_name = sender()->property( "_file_name" );
}


Можно для каждой кнопки создавать свой обьект, которьІй будет принимать сигнал. В етом же обьекте будет храниться имя файла:

Код:
QString file_name = ...;
MyHandler * handler = new MyHandler;
handler->file_name = file_name;
QPushButton * button = new QPushButton( ... );
connect( button, SIGNAL(clicked()), handler, SLOT(button_clicked()) );
Записан
izoomer
Гость
« Ответ #2 : Ноябрь 05, 2006, 22:40 »

Спасибо.
А каким образом будут отличаться имена объектов, т.е. как отличить затем кнопки , имена то у всех не смогут быть button , нужно ведь как то типа
button_1
button_2
button_3
и так далее ... или я что то не так понимаю ?
Записан
Dendy
Гость
« Ответ #3 : Ноябрь 05, 2006, 22:46 »

Всё зависит от того, что нужно получить в итоге.
Записан
QCasper
Гость
« Ответ #4 : Ноябрь 05, 2006, 22:58 »

Цитата: "izoomer"
Спасибо.
А каким образом будут отличаться имена объектов, т.е. как отличить затем кнопки , имена то у всех не смогут быть button , нужно ведь как то типа
button_1
button_2
button_3
и так далее ... или я что то не так понимаю ?


можешь названиями файлов задавать, это вообще сугубо на твое усмотрение
Записан
izoomer
Гость
« Ответ #5 : Ноябрь 06, 2006, 00:09 »

а как сделать что бы каждая новая создаваемая кнопка имела имя сходное с имененем файла ?
то есть в цикле просматриваем директорию и получаем имя файла и создаем кнопку
QPushButton * filename(...);
как так сделать ?
Записан
QCasper
Гость
« Ответ #6 : Ноябрь 06, 2006, 00:28 »

Цитата: "izoomer"
а как сделать что бы каждая новая создаваемая кнопка имела имя сходное с имененем файла ?
то есть в цикле просматриваем директорию и получаем имя файла и создаем кнопку
QPushButton * filename(...);
как так сделать ?


эхх... вот Вам пища для размышления, а дальше юз ассистант:
Код:

const char* path = "yourdir";

QDir dir(path);
dir.setFilter(QDir::Files);
QStringList fileList = dir.entryList();

QVBoxLayout *lt = new QVBoxLayout(this);

foreach(QString fileName, fileList) {
    QPushButton *btn = new QPushButton(fileName, this);
    connect(btn, SIGNAL(clicked()), this, SLOT(onClick()));
    lt->addWidget(btn);
}


P.S. А вообще мне сдается (сугубо мое субъективное мнение), что у Вас ошибка на стадии проектирования. Попахивает плохим стилем. Может расскажете, что хотите сделать?
Записан
izoomer
Гость
« Ответ #7 : Ноябрь 06, 2006, 10:57 »

хочу создавать меню динамическое из кнопок по количеству файлов в директории и на каждую кнопку назначить выполнение каждого файла. Кнопки разместить в один столбец.

добавлено спустя 23 минуты:

 сделал.
А как теперь программно фокус переводить по кнопкам созданным таким образом ?
Записан
QCasper
Гость
« Ответ #8 : Ноябрь 06, 2006, 14:56 »

Цитата: "izoomer"
А как теперь программно фокус переводить по кнопкам созданным таким образом ?


void QWidget::setFocus ( Qt::FocusReason reason )

в зависимости от чего нужно фокус устанавливать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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