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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Как лучше подойти к вопросу изучения QT? А также вопрос по setFilterWildcard.  (Прочитано 10512 раз)
Dragon
Гость
« Ответ #15 : Май 16, 2010, 21:09 »

Приношу извинения, что так дотошно интересуюсь, но до конца еще понять не могу.

Если система слотов это аналог функций С++, то код:
Код
C++ (Qt)
QRegExp rx(text);
имеет право на жизнь. По идее rx равен text. Но дебаггер (qDebug() << "Rx: " << rx;) у меня показывает:
Цитировать
Rx:  QVariant(QRegExp, )

И сразу в догонку вопрос, как из моего слота передать данные в proxyModel, как это было тут:
Код
C++ (Qt)
QObject::connect(txt, SIGNAL(textChanged(QString)),&proxyModel, SLOT(setFilterWildcard(QString)));

Или где посмотреть реализацию слота "setFilterWildcard(QString)", не могу понять как он преобразовывает строку в регулярное выражение и далее применяет его в качестве фильтра к списку стрингов Грустный
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #16 : Май 16, 2010, 21:27 »

опять всё от туда (С++), смотри свой конструктор и мой ответ №12, сколько времени живёт твоя модель посредник, доживёт ли она, до момента, когда текст в поле ввода изменится?
Записан

Юра.
Dragon
Гость
« Ответ #17 : Май 17, 2010, 15:17 »

Я понял суть проблемы с дебагером. Для вывода в дебаггер нужно выводить паттерн (а не то что я пытался вывести):
Код
C++ (Qt)
qDebug() << rx.pattern();

Переработал немного класс и он выглядит так:
myregexp.h
Код
C++ (Qt)
#ifndef MYREGEXP_H
#define MYREGEXP_H
#include <QtGui>
 
class MyRegExp : public QWidget
{
   Q_OBJECT
public:
   //Конструктор по-умолчанию
   MyRegExp(QWidget *parent = 0);
 
   //Деструктор
   ~MyRegExp();
 
public slots:
   //Слот для проверки регулярного выражения
   void chkRegExp(QString text);
 
private:
   //18.05.10
   QSortFilterProxyModel proxyModel; //Промежуточная модель
   QStringList data; //Список данных
};
 
#endif // MYREGEXP_H

myregexp.cpp
Код
C++ (Qt)
#include <QtGui>
#include "myregexp.h"
 
MyRegExp::MyRegExp(QWidget *parent):QWidget(parent)
{
   QStringListModel* model = new QStringListModel;
   data << "Aurora" << "Permanent" << "Shock" << "Behind the wall"
        << "Material" << "Anesthesia";
   model->setStringList(data);
 
   proxyModel.setSourceModel(model);
 
   QListView* pListView1 = new QListView;
   pListView1->setModel(model);
 
   QListView* pListView2 = new QListView;
   pListView2->setModel(&proxyModel);
 
   QLabel* lbl = new QLabel("&Text:");
   QLineEdit* txt = new QLineEdit;
   lbl->setBuddy(txt);
 
   //chkRegExp SLOT
   connect(txt, SIGNAL(textChanged(QString)), this, SLOT(chkRegExp(QString)));
 
   //Layout setup
   QGridLayout* pgrdLayout = new QGridLayout;
   pgrdLayout->addWidget(pListView1, 0, 0);
   pgrdLayout->addWidget(pListView2, 0, 1);
   pgrdLayout->addWidget(lbl, 1, 0);
   pgrdLayout->addWidget(txt, 2, 0, 1, 2);
 
   this->setLayout(pgrdLayout);
}
 
MyRegExp::~MyRegExp()
{
 
}
 
void MyRegExp::chkRegExp(QString text)
{
   QRegExp rx(text + "*");
   rx.setPatternSyntax(QRegExp::Wildcard);
 
   //Сверка списка с регулярным выражением
   QStringList::const_iterator constIterator;
   for(constIterator = data.constBegin(); constIterator != data.constEnd(); ++constIterator)
   {
       QString temp = *constIterator; //Очередная строка из списка
       if(rx.exactMatch(temp))
       {//Вывести в proxyModel
           //Суть вопроса//
       }
   }
}

Как из слота теперь выводить результат в proxyModel  Непонимающий
« Последнее редактирование: Май 18, 2010, 16:36 от Dragon » Записан
Dragon
Гость
« Ответ #18 : Май 18, 2010, 17:02 »

Вобщем все оказалось в разы проще, чем я это намалевал. Содержимое слота:
Код
C++ (Qt)
proxyModel.setFilterRegExp("^" + text);

Да с Qt нужно искать простые пути решения вопроса, а не придумывать себе задачи и этим самым нагромождать код, что к лучшей работе не приведет точно.

P.S> Хотя хотелось бы реализовать вывод в proxyModel и сложным путем, коим я шел изначально.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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