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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача данных с одной формы на другую  (Прочитано 5867 раз)
kadr
Гость
« : Январь 18, 2010, 11:15 »

Привет всем, помогите разобраться с проблемой, есть отчет, который нужно сформировать за определенный период. Действия- при нажатии на кнопку должно происходить следующее:
1. Выходить окно с выбором даты начала и конца поиска
2. после нажатия на кнопку ок, это окно закрывается и открывается окно с отчетом
Что удалось:
1. Создал форму выбора периода и форму с отчетом
2. Закрытие формы выбора даты
Что надо:
1. Что бы с формы выбора периода,при нажатии на кнопку, обе даты передавались в запрос для формирования отчета.
Не удается сделать так, что бы после нажатия на кнопку Ок, открывалась форма отчета, и соответственно не передаются даты!
Сообщение компилятора:
QObject::connect: Incompatible sender/receiver arguments
QToolButton::clicked() --> nozologia::pp1(QDateEdit*,QDateEdit*)   
Код:
void nozologia::on_pp1_triggered()
{
    double weght,hight;
    QDate date;
    QWidget *date_vvod = new QWidget;
    QDateEdit *date_s = new QDateEdit(date_vvod);
    QDateEdit *date_po = new QDateEdit(date_vvod);
    QToolButton *button =new QToolButton(date_vvod);

    date_vvod->setFixedSize(200,20);
    date_vvod->setWindowTitle(tr("Период отчета"));
    date_vvod->show();


    weght = date_vvod->size().width();
    hight = date_s->geometry().y();

    date_po->setGeometry(weght-date_po->size().width()-25,hight,date_s->size().width(),date_s->size().height());

    date_s->setCalendarPopup(true);
    date_po->setCalendarPopup(true);
    date_s->setDate(date.currentDate());
    date_po->setDate(date.currentDate());
    date_s->setDisplayFormat("yyyy-MM-dd");
    date_po->setDisplayFormat("yyyy-MM-dd");

    button->setText("OK");
    button->setFixedSize(date_s->size().height(),date_s->size().height());
    button->setGeometry(weght-button->size().width()-1,hight,date_s->size().height(),date_s->size().height());

    button->show();
    date_s->show();
    date_po->show();


    connect(button,SIGNAL(clicked()),this,SLOT(pp1(QDateEdit*,QDateEdit*)));
    connect(button,SIGNAL(clicked()),date_vvod,SLOT(close()));




}

void nozologia::pp1(QDateEdit *date_s,QDateEdit *date_po)
{

   

    QWebView *list = new QWebView;
    QString html,str,SQL;
    list->setAttribute(Qt::WA_DeleteOnClose);
    QFile file("pp-1.txt");
    QSqlQuery q;
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QMessageBox::warning(this,tr("Ошибка"),tr("Нет такого файла"),QMessageBox::Ok);
        }
           SQL = QString("SELECT  7n_recept.seria,\
           7n_recept.`nomer`,\
           7n_recept.`date_vip`,\
           7n_recept.`date_obr`,\
           7n_recept.`date_otp`,\
           7n_recept.kolvo,\
            \
           7n_ls_price.price,\
           (7n_recept.kolvo*7n_ls_price.price),\
           7n_doctor.pcod,\
           7n_people.fio,\
           7n_people.snils,\
            \
           7n_AU.k_au,\
           (\
           select 7n_ls.name FROM `7n_ls` WHERE 7n_ls.id = 7n_ls_price.kod\
           ),\
           (\
           select 7n_ls.kod FROM `7n_ls` WHERE 7n_ls.id = 7n_ls_price.kod\
           )\
           FROM `7n_recept`,`7n_ls_price`,7n_people,7n_doctor,`7n_AU`\
           WHERE (7n_ls_price.id =7n_recept.id_ls_price)\
           AND (7n_people.id=7n_recept.id_people)\
           AND (7n_doctor.id =7n_recept.`id_doctor`)\
           AND (7n_AU.`id`=7n_recept.`id_au`)\
           AND (date_otp >= %1)\
           AND (date_otp <= %2)")
                  .arg(date_s->text())
                  .arg(date_po->text());
           q.exec(SQL);


    ui->area->addSubWindow(list)->setFixedSize(1200,800);
    list->setWindowTitle(tr("Отчет РР-1"));
    list->show();

    while (!file.atEnd())
    {
        html.append(file.readLine().trimmed());

    }
    while (q.next())
    {
        html.append("<tr style='font-size:14'>");
        str = QString("<td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%1</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%2</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%3</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%4</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%5</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%6</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%7</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%8</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%9</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%10</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%11</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%12</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%13</td>\
                    <td align = center valign = center style='border-right:1px solid #000000; border-bottom:1px solid #000000'>%14</td>\
                    <td align = center valign = center style='border-bottom:1px solid #000000'>%15</td></tr>")
        .arg(q.value(0).toString().trimmed()+"/"+q.value(1).toString().trimmed())
        .arg(q.value(2).toString().trimmed())
        .arg(q.value(3).toString().trimmed())
        .arg(q.value(4).toString().trimmed())
        .arg(q.value(9).toString().trimmed())
        .arg(q.value(10).toString().trimmed())
        .arg(q.value(7).toString().trimmed())
        .arg(q.value(11).toString().trimmed())
        .arg(q.value(8).toString().trimmed().right(5))
        .arg(q.value(4).toString().trimmed())
        .arg(q.value(13).toString().trimmed())
        .arg(q.value(12).toString().trimmed())
        .arg(q.value(5).toString().trimmed())
        .arg(q.value(6).toString().trimmed())
        .arg(q.value(7).toString().trimmed());
        html.append(str);
    }

    html.append("</table>");
    //qDebug() << html;
    list->setHtml(html);

}
Помогите решить эту проблему!
Записан
Akaiten
Гость
« Ответ #1 : Январь 18, 2010, 11:39 »

Код
C++ (Qt)
   connect(button,SIGNAL(clicked()),this,SLOT(pp1(QDateEdit*,QDateEdit*)));
 

Так работать не будет, поэтому и выдаётся сообщение. У слота параметры должны совпадать с параметрами сигнала или по крайней мере могут использоваться только N-первых параметров сигнала. Вот цитата документации:
Цитировать
The signature of a signal must match the signature of the receiving slot. (In fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.)

Нет необходимости передавать даты в качестве параметров слота. Добавьте public методы в класс окна с выбором даты для получения введённых значений и вызывайте их, например, после exec() или в слоте на сигнал при закрытии этого окна, ну или раз вы сами создаёте элементы интерфейса, то на крайний случай date_s и date_po можно объявить в классе как public.
Записан
kadr
Гость
« Ответ #2 : Январь 18, 2010, 12:16 »

Как мне в заголовочном файле указать, что QDateEdit *date_s; и QDateEdit *date_po; являются наследниками  QWidget *date_vvod;
Я их добавил в public, но теперь при запуске программы вылетает виндовая ошибка!
Записан
BlackTass
Гость
« Ответ #3 : Январь 18, 2010, 12:35 »

Как мне в заголовочном файле указать, что QDateEdit *date_s; и QDateEdit *date_po; являются наследниками  QWidget *date_vvod;
Я их добавил в public, но теперь при запуске программы вылетает виндовая ошибка!
В смысле наследниками? вы имеете в виду кутешный parent? никак, да и зачем вам это?

Я бы не советовал в паблик выносить члены. Вам это все равно не нужно, так как все в одном объекте происходит. Ошибка скорее всего из-за того что у вас уже удаляются объекты с датами, когда вы к ним обращаетесь.
Почему бы не сделать отдельный класс с диалогом и общаться с ним через геттеры или через свои сигналы (которые уже будут отдавать две даты)?
Записан
kadr
Гость
« Ответ #4 : Январь 18, 2010, 14:17 »

Как мне в заголовочном файле указать, что QDateEdit *date_s; и QDateEdit *date_po; являются наследниками  QWidget *date_vvod;
Я их добавил в public, но теперь при запуске программы вылетает виндовая ошибка!
В смысле наследниками? вы имеете в виду кутешный parent? никак, да и зачем вам это?

Я бы не советовал в паблик выносить члены. Вам это все равно не нужно, так как все в одном объекте происходит. Ошибка скорее всего из-за того что у вас уже удаляются объекты с датами, когда вы к ним обращаетесь.
Почему бы не сделать отдельный класс с диалогом и общаться с ним через геттеры или через свои сигналы (которые уже будут отдавать две даты)?
А может можно сделать все намного проще, я не совсем понимаю как это сделать!
Записан
BlackTass
Гость
« Ответ #5 : Январь 18, 2010, 23:01 »

А может можно сделать все намного проще, я не совсем понимаю как это сделать!
Вариант с отдельным диалогом пожалуй наиболее простой. Потом в случае изменения чего-нибудь будет гораздо проще с отдельным диалогом. Плюс возможно понадобится его реюз вам где-нибудь и опять же не придется делать копи-пейст.
Записан
kadr
Гость
« Ответ #6 : Январь 19, 2010, 11:12 »

А может можно сделать все намного проще, я не совсем понимаю как это сделать!
Вариант с отдельным диалогом пожалуй наиболее простой. Потом в случае изменения чего-нибудь будет гораздо проще с отдельным диалогом. Плюс возможно понадобится его реюз вам где-нибудь и опять же не придется делать копи-пейст.
Сделал отдельно класс и форму, конечно проблем меньше, но просто не хотелось плодить файлов, когда можно динамически их создавать!
И исходя из этого у меня есть еще один вопрос, как отследить нажатие правой кнопки мыши на динамически созданном окне, это мне нужно для того что бы создать контекстное меню!
Записан
Akaiten
Гость
« Ответ #7 : Январь 19, 2010, 11:31 »

Судя по документации можно попробовать через setContextMenuPolicy(Qt::CustomContextMenu) и отслеживать сигнал customContextMenuRequested ( const QPoint & pos ). А чтобы отслеживать нажатия мыши обычно необходимо унаследовать исходный класс и переопределить один из обработчиков событий от мыши (mousePressEvent, mouseReleaseEvent, mouseDoubleClickEvent, mouseMoveEvent). Для работы с контекстным меню можно переопределить метод contextMenuEvent.
Записан
kadr
Гость
« Ответ #8 : Январь 19, 2010, 13:46 »

Спасибо вроде бы получилось, дальше будет видно как все будет работать!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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