crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Вызвать слот из другого класса
lexflax
  опции профиля:
сообщение 17.12.2014, 16:44
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
Подскажите как вызвать слот из класса class MainWindow1, после нажатия кнопки в классе class Addnomenklatura.
#ifndef MAINWINDOW1_H
#define MAINWINDOW1_H
#include <QtSql/QSqlTableModel>
#include <QMainWindow>
#include "mainwindow.h"
#include "ui_mainwindow.h"
namespace Ui {
class MainWindow1;
}

class MainWindow1 : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow1(QWidget *parent = 0);
    ~MainWindow1();

private slots:
    void on_pushButton_clicked();
void prostoSlot();
    void on_pushButton_2_clicked();

private:
    Ui::MainWindow1 *ui;
QSqlQueryModel *nomenclatura;

};


#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "Addnomenklatura.h"
#include "ui_Addnomenklatura.h"
#include <QtSql/QSqlTableModel>
#include <QTableView>
#include <QtSql/QSqlError>
#include <QtSql/QSqlRecord>
#include <QMessageBox>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlQuery>
MainWindow1::MainWindow1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow1)
{
    ui->setupUi(this);

    QSqlQueryModel *nomenclatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenclatura->setQuery(query);
    ui->tableView->setModel(nomenclatura);

}

MainWindow1::~MainWindow1()
{
    delete ui;
}

void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
    n1->show();

}

void MainWindow1::on_pushButton_2_clicked()
{

}
void MainWindow1:: prostoSlot() Этот слот нужно вызвать!!!!!
{

        QMessageBox::information(NULL,QObject::tr("Информация"),tr("Слот вызван"));
        QSqlQueryModel *nomenclatura = new QSqlQueryModel;
        QSqlQuery query;
        query.exec("SELECT * FROM nomenklatura");
        nomenclatura->setQuery(query);
        ui->tableView->setModel(nomenclatura);

}

#ifndef ADDNOMENKLATURA_H
#define ADDNOMENKLATURA_H
#include <QtSql/QSqlTableModel>
#include <QMainWindow>
#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
namespace Ui {
class Addnomenklatura;
}
class Addnomenklatura : public QMainWindow
{
    Q_OBJECT

public:
    explicit Addnomenklatura(QWidget *parent = 0);
    ~Addnomenklatura();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Addnomenklatura *ui;
};

#endif // ADDNOMENKLATURA_H


#include "addnomenklatura.h"
#include "ui_addnomenklatura.h"
#include <QtSql/QSqlRecord>
#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlQuery>
Addnomenklatura::Addnomenklatura(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Addnomenklatura)
{
    ui->setupUi(this);

connect(ui->pushButton,SIGNAL(clicked()),?,SLOT(prostoSlot())); думал как соединить сигнал со слотом... но не пришел к правильному варианту
}

Addnomenklatura::~Addnomenklatura()
{
    delete ui;
}

void Addnomenklatura::on_pushButton_clicked() После нажатия этой кнопки должен вызваться слот!!!
{

    QSqlQuery query;
           query.prepare("INSERT INTO  nomenklatura (id_n,kod_pozicii,name_pozicii,cena) VALUES ( :id_n,:kod_pozicii,:name_pozicii,:cena)");
           query.bindValue(":id_n", ui->lineEdit->text());
           query.bindValue(":kod_pozicii", ui->lineEdit->text());
           query.bindValue(":name_pozicii", ui->lineEdit->text());
           query.bindValue(":cena", ui->lineEdit->text());
           query.exec();

this->close();

}

void Addnomenklatura::on_pushButton_2_clicked()
{
   this->close();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 17.12.2014, 18:04
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


как то так:
void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
    connect(n1, SIGNAL(сигнал()), this, SLOT(слот()));
    n1->show();

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 17.12.2014, 18:45
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Trisch @ 17.12.2014, 18:04) *
как то так:
void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
    connect(n1, SIGNAL(сигнал()), this, SLOT(слот()));
    n1->show();

}

возможно я не правильно понимаю, но нужно чтоб после нажатия кнопки на форме
void Addnomenklatura::on_pushButton_clicked()
вызывался слот а вы указываете
void MainWindow1::on_pushButton_clicked()

все понял)))
void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
        connect(n1, SIGNAL(pushButton()), this, SLOT(prostoSlot()));
     n1->show();
}

Но теперь программа завершается крахом((( в чем может быть причина?(

в системе отладчика пишет
Приложение остановлено, так как оно получило сигнал от операционной системы.

Сигнал:
SIGSEGV
Назначение:
Segmentation fault


теперь другая беда
void MainWindow1::on_pushButton_clicked()
void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
        connect(n1, SIGNAL(pushButton()), this, SLOT(prostoSlot()));
     n1->show();
}

не вызывает слот пишет
QObject::connect: No such signal Addnomenklatura::on_pushButton_clicked() in ..\one\mainwindow1.cpp:39
QObject::connect: (sender name: 'Addnomenklatura')
QObject::connect: (receiver name: 'MainWindow1')
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 17.12.2014, 22:34
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Цитата(lexflax @ 17.12.2014, 19:45) *
Но теперь программа завершается крахом((( в чем может быть причина?(


При каких условиях программа падает?

Цитата(lexflax @ 17.12.2014, 19:45) *
не вызывает слот пишет
QObject::connect: No such signal Addnomenklatura::on_pushButton_clicked() in ..\one\mainwindow1.cpp:39
QObject::connect: (sender name: 'Addnomenklatura')
QObject::connect: (receiver name: 'MainWindow1')


наверное, нет такого сигнала. Подробнее о сигналах и слотах тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lexflax
  опции профиля:
сообщение 18.12.2014, 15:10
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 26.5.2013
Пользователь №: 3841

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Trisch @ 17.12.2014, 22:34) *
Цитата(lexflax @ 17.12.2014, 19:45) *
Но теперь программа завершается крахом((( в чем может быть причина?(


При каких условиях программа падает?

Цитата(lexflax @ 17.12.2014, 19:45) *
не вызывает слот пишет
QObject::connect: No such signal Addnomenklatura::on_pushButton_clicked() in ..\one\mainwindow1.cpp:39
QObject::connect: (sender name: 'Addnomenklatura')
QObject::connect: (receiver name: 'MainWindow1')


наверное, нет такого сигнала. Подробнее о сигналах и слотах тут


Я добавил сигнал и слот вызывается, но проблема в другом, не обновляется tableview, подскажите что в данному случае делаю не так, в слоте как раз и есть обновление...
Сам слот
[/code]void MainWindow1:: prostoSlot()
{


        QMessageBox::information(NULL,QObject::tr("Информация"),tr("Слот вызван"));
        QSqlQueryModel *nomenclatura = new QSqlQueryModel;
        QSqlQuery query;
        query.exec("SELECT * FROM nomenklatura");
        nomenclatura->setQuery(query);
        ui->tableView->setModel(nomenclatura);


}
mainwindow1.cpp
[code]
#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "Addnomenklatura.h"
#include "ui_Addnomenklatura.h"
#include <QtSql/QSqlTableModel>
#include <QTableView>
#include <QtSql/QSqlError>
#include <QtSql/QSqlRecord>
#include <QMessageBox>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlQuery>
MainWindow1::MainWindow1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow1)
{
    ui->setupUi(this);

    QSqlQueryModel *nomenclatura = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM nomenklatura");
    nomenclatura->setQuery(query);
    ui->tableView->setModel(nomenclatura);





}

MainWindow1::~MainWindow1()
{
    delete ui;
}

void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
        connect(n1, SIGNAL(mySignal()), this, SLOT(prostoSlot()));
     n1->show();
}

void MainWindow1::on_pushButton_2_clicked()
{

}
void MainWindow1:: prostoSlot()
{


        QMessageBox::information(NULL,QObject::tr("Информация"),tr("Слот вызван"));
        QSqlQueryModel *nomenclatura = new QSqlQueryModel;
        QSqlQuery query;
        query.exec("SELECT * FROM nomenklatura");
        nomenclatura->setQuery(query);
        ui->tableView->setModel(nomenclatura);


}

Addnomenklatura.cpp
#include "addnomenklatura.h"
#include "ui_addnomenklatura.h"
#include <QtSql/QSqlRecord>
#include "mainwindow1.h"
#include "ui_mainwindow1.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlQuery>
Addnomenklatura::Addnomenklatura(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Addnomenklatura)
{
    ui->setupUi(this);



}

Addnomenklatura::~Addnomenklatura()
{
    delete ui;
}

void Addnomenklatura::on_pushButton_clicked()
{
emit mySignal();
    QSqlQuery query;
           query.prepare("INSERT INTO  nomenklatura (id_n,kod_pozicii,name_pozicii,cena) VALUES ( :id_n,:kod_pozicii,:name_pozicii,:cena)");
           query.bindValue(":id_n", ui->lineEdit->text());
           query.bindValue(":kod_pozicii", ui->lineEdit->text());
           query.bindValue(":name_pozicii", ui->lineEdit->text());
           query.bindValue(":cena", ui->lineEdit->text());
           query.exec();

this->close();


}

void Addnomenklatura::on_pushButton_2_clicked()
{
   this->close();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 20.12.2014, 19:03
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Цитата(lexflax @ 18.12.2014, 15:10) *
Я добавил сигнал и слот вызывается, но проблема в другом, не обновляется tableview, подскажите что в данному случае делаю не так, в слоте как раз и есть обновление...


А почему он должен обновляться? У вас меняются данные в базе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 6:16