crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Поиск в модели из скрипта
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
JohnZ Дата 19.5.2017, 12:26
  Решилось с пом-ю prog.org.ru

Раскрывающийся текст

bool fpQForma::match(int col, QVariant value, bool seek)
{
QModelIndex idx;
int row_count = model->rowCount();

for(int i = 0;i < row_count;i++)
{
idx = model->index(i, col);
if( model->data(idx) == value)
{
if (seek)
viewChild->setCurrentIndex(idx);
return(true);
}
}
return(false);
}

Не самое лучшее решение, но работает ! На 2-3 тыс записей ищет довольно быстро ...
JohnZ Дата 8.5.2017, 15:43
  Народ, аууууу Неужели никаких идей ?

Нарыл в нете более-менее подходящий вариант с использованием

QModelIndexList QAbstractItemModel::match ( .... ) const

но как ей "объяснить" в какой колонке искать не знаю :(

И кроме того, как пишут на prog.ru если юзер не скролил до конца таблицы,
т.е. данные не кешированы полностью, match практически беЗполезен :(
По-крайней мере для куте 4.3 так было ...
JohnZ Дата 4.5.2017, 10:58
  Всем здравия !

Есть такой класс объекта...
Раскрывающийся текст

class fpForma : public QDialog
{
Q_OBJECT

public:

fpForma(int id, MainWindow *parent = 0, Qt::WindowFlags f = 0);
~fpForma();

bool initForm(int Cmd = 0);

public slots:

void save();
void submit();

private:

QSqlTableModel *model;
QTableView *view;

QModelIndex curIndex;
QSqlRecord curRecord;
};

И его класс модели, почти стандартный ...
Раскрывающийся текст

class fpTableModel : public QSqlTableModel
{
public:
fpTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase());
~fpTableModel();

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
void setTable ( const QString & tableName );
int columnCount(const QModelIndex &parent = QModelIndex()) const;
void setDefFields(QStringList & df);

private:
int colsInList, colsInForm;
QStringList DefFields;
};

Таблица, обслуживаемая этим объектом имеет примерно такую структуру
    
   Код            char(6)
   Наименование    char(32)
   КодШК            char(16)   <-- Штрих-Код
   Остаток        int
   Цена            double


Выглядит это примерно как на картинке в прицепе ...
В скрипте загружаем и инициализируем драйвер сканера ШК
function frm579Create()
{
    nstr = kodc = 0;

    if (this["bcs0018"] == undefined)
        scanerStatus = mw.loadExtension("bcs0018")

    if (scanerStatus == 0)
    {
        scanerStatus = bcs0018.start();
        bcs0018.BarCodeReady.connect(this, this.frm579bcs);
    }
}


Функцмя скрипта на которую прицеплен сканер ШК
function frm579bcs(skod)
{
//  debugger

    bcs =  skod;
    stablo.text = skod;
}

Код со сканера в ф-цию приходит ! Код ШК является невидимой колонкой !

Сам объект fpForma в скрипте виден как frm579 ...
И вотЪ теперь вопрос, - как в объекте fpForma организовать поиск и позиционирование на нужную строку ?
Ведь доступа к модели из скрипта у меня нет ?! :-(
Заранее благодарен за помощь !!!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 22:50