Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Програмирование платформенно-независимых систем > Trolltech Qt
Перезагрузить страницу Вызвать слот из другого класса
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
Post Вызвать слот из другого класса - 17.12.2014, 18:13

Доброго времени суток.
Подскажите как вызвать слот из класса class MainWindow1, после нажатия кнопки в классе class Addnomenklatura.
cpp Код:
#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;

};

cpp Код:
#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);

}

cpp Код:
#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

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);

 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();
}
Ответить с цитированием
  (#2 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 17.12.2014, 19:35

Если делать так
cpp Код:
[code]void MainWindow1::on_pushButton_clicked()
{
    Addnomenklatura *n1 = new  Addnomenklatura;
        connect(n1, SIGNAL(pushButton()), this, SLOT(prostoSlot()));
     n1->show();
}[/code]
(
То программа завершается крахом( в чем может быть причина?(
Ответить с цитированием
  (#3 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 17.12.2014, 19:38

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

Сигнал:
SIGSEGV
Назначение:
Segmentation fault
Ответить с цитированием
  (#4 (permalink)) Старый
Lexflax Lexflax вне форума
Member
 
Сообщений: 92
Сказал(а) спасибо: 35
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.04.2011
По умолчанию 17.12.2014, 19:51

теперь другая беда...
cpp Код:
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')
Я так понимаю не правильно указан сигнал, как тогда правильно сигнал кнопки указать?
Ответить с цитированием
  (#5 (permalink)) Старый
rrrFer rrrFer вне форума
Р.Р.Р.Ф.Е.Р
 
Сообщений: 208
Сказал(а) спасибо: 12
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 08.09.2008
Адрес: Russia, Krasnoyarsk
По умолчанию 18.12.2014, 04:14

Цитата:
Я так понимаю не правильно указан сигнал, как тогда правильно сигнал кнопки указать?
У твоего объекта вообще нет сигнала с указанным именем. Добавь в класс свой

cpp Код:
signals:
  void pushButton();
Или типа того.

Почитай уже книжку и перестань задавать такие вопросы. Хотя бы про сигналы и слоты прочитай тут: сигналы, слоты и события.


Решенные задачи на Prolog: http://pro-prof.com/forums/forum/programming/prolog-help
Введение в логическое программирование: http://pro-prof.com/archives/2362
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к EditBox из другого класса Danila52 Visual C++ 4 13.08.2011 10:19
Как вызвать скрипт из другого скрипта Anonymous Perl 9 07.02.2008 14:30
Видимость переменной одного класса из другого yury_m Visual C++ 32 19.12.2007 22:31
Указатель из класса на функцию другого класса NVSarge С/С++ 3 22.02.2007 16:24
Получить указатель на интерфейс КОМ-класса из другого потока Rocky Visual C++ 2 07.09.2006 20:48
Обращение к структуре другого класса Monah IRH С/С++ 7 05.08.2005 18:34
Как вызвать javascript-функцию из другого фрейма senglory DHTML, JavaScript, VBScript 3 08.07.2005 11:28
Как можно вызвать из функции класса окна например функцию FindWindow uncon Visual C++ 2 15.04.2005 14:55
Способы получения значения переменной из другого класса valentas Вопросы начинающих программистов 7 25.10.2004 20:54
Как в классе вызвать ф-цию другого, созданного в нем, класса feedbee PHP 6 13.07.2004 17:56
Как вызвать метод класса не включенного в мой ivanyan Java 14 03.06.2003 18:25
Как вызвать функцию-член другого класса EasyRider Visual C++ 5 04.02.2003 15:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов