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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCheckBox + QLineEdit  (Прочитано 2973 раз)
BuRn
Гость
« : Декабрь 17, 2011, 07:17 »

Есть функция, которая с таблицы подгружает данные:
Код:
QSqlQuery query;
    query.prepare(QString("SELECT * FROM article_article"));
    query.exec();
    int avaliability;
    while(query.next())
    {
        QHBoxLayout *layout = new QHBoxLayout;
        QLabel *label = new QLabel;
        label->setText(query.value(2).toString());
        layout->addWidget(label);
        avaliability = query.value(9).toInt();
        if(avaliability == 1)
        {
            QCheckBox *box = new QCheckBox;
            box->setObjectName(query.value(2).toString());
            if(query.value(10).toInt() == 0)
                box->setChecked(true);
            layout->addWidget(box);
        }
        else
        {
            QLineEdit *edit = new QLineEdit;
            edit->setObjectName(query.value(2).toString());
            edit->setText(query.value(10).toString());
            layout->addWidget(edit);
        }
        ui->verticalLayout_2->addLayout(layout);
        }
после нужно по кнопочке все это обработать... т.е. считать то что там наделал пользоатель, редактировал ли товар, изменял ли положение чекбоксов и после выгрузить новые данные в базу, обновить...
Ума не приложу как получить доступ из обработчика к виджетам, т.е. узнать какой виджет... QCheckBox или QlineEdit
Пока додумался только взять главный layout пройтись по нему, из него вытащить дочерние layout-ы и после из них вытащить выджеты, но как проверить что за ти виджета ?
 
Код:
for(int i=0;ui->verticalLayout_2->itemAt(i)!=NULL;i++)
    {
        QHBoxLayout *la = (QHBoxLayout *)ui->verticalLayout_2->itemAt(i)->layout();
        for(int j=0;la->itemAt(j)!=NULL;j++)
        {
            if(la->itemAt(j)->widget() )//тут по хорошему нужно проверить является виджет чек боксом либо лайнэдитом либо вообще лейблом
            {
                    int u;
            }
        }
    }
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Декабрь 17, 2011, 10:24 »

Ума не приложу как получить доступ из обработчика к виджетам, т.е. узнать какой виджет... QCheckBox или QlineEdit
Самый очевидный вариант - сохранять их в массиве/списке/векторе.

Пока додумался только взять главный layout пройтись по нему, из него вытащить дочерние layout-ы и после из них вытащить выджеты, но как проверить что за ти виджета?
qobject_cast с проверкой на 0. Всё равно ж вам указатели нужного типа понадобятся. (можно и dynamic_cast, но он помедленней).
Записан
BuRn
Гость
« Ответ #2 : Декабрь 17, 2011, 12:44 »

а можно пример с qobject_cast , как его применить в моем случае
Записан
BuRn
Гость
« Ответ #3 : Декабрь 17, 2011, 13:52 »

все разобрался
Записан
Disaron
Гость
« Ответ #4 : Декабрь 17, 2011, 16:40 »

еще есть:
Код
C++ (Qt)
bool QObject::inherits ( const char * className ) const
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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