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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обратится к компоненту на другой форме  (Прочитано 3942 раз)
lexflax
Гость
« : Январь 12, 2014, 04:33 »

Не могу  добится чтоб после внесения запись в таблицу код, обновлялось представление зевс которые связанно с таблицей код.
 Представление зевс находится на главной форме MainWindow.ui
 в компонент tableView
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    zews = new QSqlTableModel(0,db);
        zews->setTable("zews");
        zews->select();
        ui->tableView->setModel(zews);
        zews->setEditStrategy(QSqlTableModel::OnManualSubmit);
 
}
кнопка которая добавляет новую запись в таблицу код находится на форме form4.ui
Код:
void Form4::on_pushButton_clicked()
{
 
QString KODVUZA,GOSKOD,KODK;
KODVUZA = ui->comboBox_3->currentText();
GOSKOD = ui->comboBox_5->currentText();
KODK = ui->comboBox->currentText();
QSqlQuery query;
 
query.exec("INSERT INTO  kod (kodsv,kodg,kodk)" "VALUES (23213,150200,1)");
 
zews = new QSqlTableModel(0,db);
    zews->setTable("zews");
    zews->select();
   ui->tableView->setModel(zews); в этой строчке пишет ошибку..
    zews->setEditStrategy(QSqlTableModel::OnManualSubmit);
this->close();
}
ui->tableView->setModel(zews); в этой строчке пишет ошибку.. так как такого компонента на этой форме нету!! он находится на форме MainWindow.ui. как мне сделать чтоб после нажатия кнопки на form4 вот этот код
Код:
zews = new QSqlTableModel(0,db);
    zews->setTable("zews");
    zews->select();
   ui->tableView->setModel(zews);
    zews->setEditStrategy(QSqlTableModel::OnManualSubmit);
перегружался в форме MainWindow.ui и чтоб наконец мое представление зевс сразу показывало добавленную строчку после нажатия кнопки , а не после перезагрузки приложения
Записан
Bepec
Гость
« Ответ #1 : Январь 12, 2014, 09:28 »

Есть пара вариантов:
1)Нужно использовать систему сигнал-слотов. У mainWindow создаётся слот с нужными вам аргументами и кодом. А в классе form4 создаётся сигнал с такими же аргументами. Ну и соединяем их через connect.
2) сделать ui mainWindow публичным. Но это плохо в дальнейшей перспективе Улыбающийся
Записан
lexflax
Гость
« Ответ #2 : Январь 12, 2014, 09:32 »

1)Нужно использовать систему сигнал-слотов. У mainWindow создаётся слот с нужными вам аргументами и кодом. А в классе form4 создаётся сигнал с такими же аргументами. Ну и соединяем их через connect.
этот вариант я рассматривал и пытался по примерам понять как мне надо составить.... но увы ума не хватает как этот сделать...
Записан
Bepec
Гость
« Ответ #3 : Январь 12, 2014, 09:45 »

Нужен не ум, а Бланшет в открытой вкладке Улыбающийся Программирование на Qt книжка называется.

Вкратце.

mainWindow.h
Код:
private slots:
void prostoSlot(int data);
mainWindow.cpp
Код:
void prostoSlot(int data)
{
ui.lineEdit->setText(QString::number(data));
}
//И после создания экземпляра класса form4 пишем
connect(&наименованиеПеременнойКлассаForm4, SIGNAL(prostoSignal(int)), this, SLOT(prostoSlot(int)));
form4.h
Код:
signals:
void prostoSignal(int data);
form4.cpp
Код:
// в нужном месте пишем 
emit prostoSignal(какое то число);
Записан
lexflax
Гость
« Ответ #4 : Январь 12, 2014, 14:11 »

не знаю как я это сделал))) но я это сделал)))
в mainWindow.h добавил
Код:
void prostoSlot();
в mainWindow.cpp добавил
Код:
void MainWindow:: prostoSlot()
{
    zews = new QSqlTableModel(0,db);
        zews->setTable("zews");
        zews->select();
       ui->tableView->setModel(zews);
        zews->setEditStrategy(QSqlTableModel::OnManualSubmit);
}
и строчку
Код:
connect( ui->pushButton, SIGNAL( clicked() ),this,  SLOT(prostoSlot()));
в часть кода
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    zews = new QSqlTableModel(0,db);
        zews->setTable("zews");
        zews->select();
        ui->tableView->setModel(zews);
        zews->setEditStrategy(QSqlTableModel::OnManualSubmit);
connect( ui->pushButton, SIGNAL( clicked() ),this,  SLOT(prostoSlot()));
}
Записан
Bepec
Гость
« Ответ #5 : Январь 12, 2014, 14:16 »

Ну... Прочитал сообщение, включил мозг, распознал шаблон действий, потом импровизация и финита.

PS мб темку удалить? её клонов дофига и больше Улыбающийся
Записан
lexflax
Гость
« Ответ #6 : Январь 12, 2014, 14:55 »

Подскажите как мне примерно сделать следующее , у меня остались еще 2 кнопки не настроенных...
Сейчас думаю над настройкой кнопки удаления записи из базы данных...
на главной форме у меня информация выводится через представление zews... информация в него попадает если запись есть в таблице kod.
Из представлния на прямую я естественно ничего удалять не могу... чтоб удалилась запись из него надо соответствущую строку удалить из таблицы код...
Тоесть пользователь выбирает строчку и нажимает кнопку удалить... а дальше параметры как то из этой строчки надо грубо говоря высосать)) а именно код специальности вуза) и в переменную или куда нибудь еще записать чтоб передать это параметр в запрос к обращении в таблицу код... вот как этот параметр получить не знаю...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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