Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализовать поиск по объектам класса и отобразить 
:(
    Опции темы
r00712
  Дата 10.5.2014, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.9.2013

Репутация: нет
Всего: нет



К слову - я полный нуб. Имеется класс с некоторыми данными, которые отображаются в главном окне в виджете
Код

QTableView *view


Так же в главном окне реализован поиск по объектам данного класса следующим образом:

Код

void MainWindow::searchButtonClicked()
{
    dataListOut = new List(this);
    QString famwor = Edit1->text();
    int kol = 0;
    QModelIndex index;
    Hospital pacient; //создаем объект класса, по которому ищем
    view1->reset();
    int col = 0;
    for(int r=0; r<dataListOut->rowCount();r++)
    {
        index = dataListOut->index(r,col,QModelIndex());
        dataListOut->delPacient(index);
    }
    int column=0;
    for(int row=0; row<dataList->rowCount(); row++)
    {
        index = dataList->index(row,column,QModelIndex());
        pacient = dataList->getPacient(index);
        if (pacient.getfam() == famwor)
        {
            kol++; dataListOut->addPacient(pacient);
        }
    }
    view1->setModel(dataListOut);
    view1->resizeColumnsToContents();
    view1->resizeRowsToContents();
    QString str; str.setNum(kol);
    Label2->setText(str);
}

Тоесть мы вводим фамилию, и если pacient.getfam==famwor, мы отображаем его в QTableView *view2.
Нужно реализовать точно такой же поиск, но не в главном окне, а в новом, в этом вся проблема
Для этого создал новый класс
Код

#ifndef SEARCHFAM_H
#define SEARCHFAM_H
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QDialogButtonBox>
#include <list.h>
#include <QTableView>
#include <QLabel>
 
class Searchfam:public QDialog
{
     void createWidgets();
     void placeWidgets();
     void connectSlots();
 QDialogButtonBox *buttons;
 QLineEdit *Edit2;
 List *dataList;
 QTableView *view1;
 List *dataListOut;
 QLabel *Label1, *Label2;
public:
    Searchfam();
public slots:
    void accept();
};
 
#endif // SEARCHFAM_H


и cpp'шный 
Код

#include "searchfam.h"
#include "list.h"
#include "editdialog.h"
#include <mainwindow.h>
#include <QFormLayout>
#include <QMessageBox>
 
Searchfam::Searchfam()
{
    createWidgets();
    connectSlots();
    placeWidgets();
    setWindowTitle("Найти по фамилии...");
}
 
void Searchfam::createWidgets()
{
    Edit2 = new QLineEdit;
    buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
}
 
 
void Searchfam::placeWidgets()
{
    QFormLayout *mainLayout = new QFormLayout;
    mainLayout->setHorizontalSpacing(20);
    mainLayout->addRow("Задайте фамилию", Edit2);
    mainLayout->addRow(buttons);
    setLayout(mainLayout);
}
void Searchfam::connectSlots()
{
    connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
    connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
}
 
void Searchfam::accept()
{   dataListOut = new List(this);
    QString famwor = Edit2->text();
    int kol = 0;
    QModelIndex index;
    Hospital pacient;
    view1->reset();
    int col = 0;
    for(int r=0; r<dataListOut->rowCount();r++)
    {
        index = dataListOut->index(r,col,QModelIndex());
        dataListOut->delPacient(index);
    }
    int column=0;
    for(int row=0; row<dataList->rowCount(); row++)
    {
        index = dataList->index(row,column,QModelIndex());
        pacient = dataList->getPacient(index);
        if (pacient.getfam() == famwor)
        {
            kol++; dataListOut->addPacient(pacient);
        }
    }
    view1->setModel(dataListOut);
    view1->resizeColumnsToContents();
    view1->resizeRowsToContents();
    QString str; str.setNum(kol);
    Label2->setText(str);
 
    QDialog::accept();
}

Что нужно написать в слоте accept(), чтобы поиск осуществлялся и результат выводился с главном окне в view1?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.