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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: QtableView и QSqlTableModel добавление новой строки  (Прочитано 39782 раз)
trenkinan
Гость
« Ответ #30 : Май 10, 2010, 21:36 »

Под динамическим созданием ты подразумеваешь, на сколько  понял, создание переменной в использующей ее функции. Мне нужно использовать переменную model1 как в главной функции, так и в обработчике кнопки, причем нужно, чтобы кнопка и главная функция могли работать напрямую с переменной для этого использую адрес переменной( спасибо за поправку). Как вот все это грамотнее реализовать пока не соображу .
« Последнее редактирование: Май 10, 2010, 21:42 от trenkinan » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #31 : Май 11, 2010, 16:01 »

>>Под динамическим созданием ты подразумеваешь, на сколько  понял,
>>создание переменной в использующей ее функции.
нет, я понимаю следующую запись:
Код
C++ (Qt)
var = new ClassName();

>>Как вот все это грамотнее реализовать пока не соображу .
В объявлении класса пишешь:
Код
C++ (Qt)
private:
   ClassName *var;
А в конструкторе класса инициализируешь этот указатель динамически созданным объектом:
Код
C++ (Qt)
var = new ClassName();
« Последнее редактирование: Май 11, 2010, 16:03 от lit-uriy » Записан

Юра.
crossly
Гость
« Ответ #32 : Май 11, 2010, 16:11 »

а вас QSqlTableModel или QSqlRelationalTableModel ??
Записан
trenkinan
Гость
« Ответ #33 : Май 11, 2010, 18:17 »

Спасибо, попробую. У меня QSqlTableModel.
Записан
trenkinan
Гость
« Ответ #34 : Май 11, 2010, 18:30 »

Спасибо, попробую. У меня QSqlTableModel. и вопрос: получается,что сначала в одной потом в другой ф-ии я объявляю новый элемент класса с одним и тем же именем? Вот только программа при запуске падает с критической ошибкой и сообщением в дебаге:
Код:
ASSERT failure in QVector<T>::at: "index out of range", file ../../include/QtCore/../../src/corelib/tools/qvector.h, line 327
Записан
crossly
Гость
« Ответ #35 : Май 11, 2010, 18:33 »

интересно .... как это у вас так получается.... показать можешь??
Записан
trenkinan
Гость
« Ответ #36 : Май 11, 2010, 18:43 »

Да сам ненарадуюсь, что сотворил...  Смотрите на здоровье:

main.cpp:
Код
C++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
   ui->setupUi(this);
   model1 = new QSqlTableModel;
   proxyModel = new QSortFilterProxyModel;
   db = QSqlDatabase::addDatabase("QMYSQL");
   db.setDatabaseName( "organization" );
   db.setHostName("localhost");
   db.setUserName("root");
   db.setPassword("trenkinan90");
   if(db.open())
   {
 
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("windows-1251"));
   model1->setTable("peoples4");
   model1->select();
   ui->mytable->setModel(model1);
   ui->mytable->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed);
row = model1->rowCount();
 
        proxyModel->setSourceModel(model1);
        ui->mytable->setModel(proxyModel);
   QTextCodec::setCodecForTr(QTextCodec::codecForName("windows-1251"));
   model1->setHeaderData(6, Qt::Horizontal,
                  tr("Женат/замужем"));
   model1->setHeaderData(8, Qt::Horizontal,
                  tr("Дата рождения"));
    view.setAlternatingRowColors(true);
    view.setModel(model1);
    QSqlQuery temp;
 }
   else qDebug()<<"Error in opening"<<db.lastError();
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::on_create_triggered()
{
   model1 = new QSqlTableModel;
   model1->insertRow(row);
   model1->submitAll();
}
 

 Заголовочный файл:
Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QAction>
#include<QMenu>
#include<QtSql>
#include <QModelIndex>
#include <QTableView>
#include <QSortFilterProxyModel>
#include <QtGui/QMainWindow>
 
namespace Ui
{
   class MainWindowClass;
}
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
   MainWindow(QWidget *parent = 0);
   ~MainWindow();
   int row;
   QTableView view;
QSqlRecord rec;
QModelIndex insertIndex;
   QSqlDatabase db;
   QMenu menu;
 
private:
   Ui::MainWindowClass *ui;
   QSqlTableModel *model1;
   QSortFilterProxyModel *proxyModel;
 
private slots:
   void on_create_triggered();
};
Это созданный мной тестовый проект, с остальным функционалом не связан. Но и там и тут одна и та же ошибка. Думаю, связано с неаккуратной работой с памятью( с указателями).
Записан
crossly
Гость
« Ответ #37 : Май 11, 2010, 18:50 »

ох ты еп........ товарисч.... модель нужно создавать после соединения с БД.... потому как ей нужно действующее соединение.... и совсем не нужно делать это 2 раза...
Записан
trenkinan
Гость
« Ответ #38 : Май 11, 2010, 20:46 »

Простое человеческое Спасибо тебе, crossly. Заработало. Не бейте ногами, я ж не знал, что нужно сначала то а потом это=) ну вы понимаете что=). Буду делать дальше. Удаление пока не пробовал, думаю там все тоже работает
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #39 : Май 11, 2010, 23:54 »

ну два раза, разумеется, создавать модель не нужно.
Записан

Юра.
trenkinan
Гость
« Ответ #40 : Май 12, 2010, 07:06 »

Вопрос не по теме, но новую создавать не хочу : Как сделать боевую раскраску а-ля "тельняшка"(полоса белая-полоса светло серая) в таблице и как сделать один столбец синим?
Записан
Kolobok
Гость
« Ответ #41 : Май 12, 2010, 10:41 »

Как сделать боевую раскраску а-ля "тельняшка"(полоса белая-полоса светло серая) в таблице

setAlternatingRowColors ( bool enable )
Записан
trenkinan
Гость
« Ответ #42 : Май 12, 2010, 11:14 »

уже давно сделал. Что дальше?
Записан
trenkinan
Гость
« Ответ #43 : Май 12, 2010, 23:51 »

Извините, разобрался, Использовал по ошибке сразу две модели... А как теперь сделать один Столбец синим?
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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