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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTabBar и QTableView/QSqlTableModel  (Прочитано 8403 раз)
chu
Гость
« : Февраль 28, 2011, 22:41 »

есть 2 таблицы с одинаковыми полями, хочу переключатся между ними по табам.
сделал так:
Код:
CheckForm::CheckForm(QWidget *parent)
    :QDialog(parent)
{
    setWindowFlags(Qt::Window);

    checkModel = new  QSqlRelationalTableModel;
    checkModel->setTable("send");
    checkModel->setRelation(Check_Product, QSqlRelation("product", "id", "title"));
    checkModel->setSort(Check_Id, Qt::AscendingOrder);
    checkModel->setHeaderData(Check_Mark, Qt::Horizontal, tr("обозначение"));
    checkModel->setHeaderData(Check_Det, Qt::Horizontal, tr("наименование"));
    checkModel->setHeaderData(Check_SendSum, Qt::Horizontal, tr("сдано"));
    checkModel->setHeaderData(Check_SendDate, Qt::Horizontal, tr("дата и время сдачи"));
    checkModel->setHeaderData(Check_RecvSum, Qt::Horizontal, tr("принято"));
    checkModel->setHeaderData(Check_RecvDate, Qt::Horizontal, tr("дата и время приема"));
    checkModel->setHeaderData(Check_Product, Qt::Horizontal, tr("Изделие"));
    checkModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    checkModel->select();

    checkTableView = new QTableView;
    checkTableView->setModel(checkModel);
    checkTableView->setColumnHidden(Check_Id, true);
    checkTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    checkTableView->resizeColumnsToContents();

    deleteButton  = new QPushButton(tr("Удалить"));
    closeButton = new QPushButton(tr("Закрыть"));

    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteCheck()));

    tabBar = new QTabBar(this);
    tabBar->addTab(tr("из 3 в 4"));
    tabBar->addTab(tr("из 3 на склад"));

    connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(changeTable(int)));

    QGridLayout *lay = new QGridLayout;
    lay->addWidget(tabWidget, 0, 0);
    lay->addWidget(checkTableView, 1, 0, 4, 1);
    lay->addWidget(deleteButton, 1, 1, 1, 1);
    lay->addWidget(closeButton, 3,1,1,1);
    lay->setRowStretch(2,10);
    setLayout(lay);

    resize (1024, 640);
    setWindowTitle(tr("Акты сдачи/приёмки"));
}

void CheckForm::changeTable(int tab){
    if(tab==0){
        checkModel->setTable("send");
        checkModel->select();
    }
    if(tab==1){
        checkModel->setTable("store");
        checkModel->select();
    }
}
пришлось создать 2 TableView, т.к. QTabWidget не хотел создавать 2 таба с одинаковыми виджетами.
при переключении сбрасываются названия заголовков и появляются пустые строки,
кол-во пустых строк = кол-ву строк предыдушего TableView.
как исправить?
« Последнее редактирование: Март 01, 2011, 17:13 от chu » Записан
maint
Гость
« Ответ #1 : Март 01, 2011, 06:57 »

внимательно смотрим в текст. Каждый раз НА ОДНОЙ И ТОЙ ЖЕ глобально описаной переменной заново создается новая модель и табвиджет
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Март 01, 2011, 09:18 »

Цитировать
пришлось создать 2 TableView, т.к. QTabWidget не хотел создавать 2 таба с одинаковыми виджетами.
См. QTabBar.
Записан

Qt 5.11/4.8.7 (X11/Win)
chu
Гость
« Ответ #3 : Март 01, 2011, 17:19 »

Цитировать
пришлось создать 2 TableView, т.к. QTabWidget не хотел создавать 2 таба с одинаковыми виджетами.
См. QTabBar.
переписал с QTabBar, спасибо Улыбающийся
внимательно смотрим в текст. Каждый раз НА ОДНОЙ И ТОЙ ЖЕ глобально описаной переменной заново создается новая модель и табвиджет
не совсем понял что ты хотел сказать... при переключении по табам нужно по новой создавать модель?
Записан
chu
Гость
« Ответ #4 : Март 04, 2011, 09:52 »

осознал нелепость своего изначального подхода Улыбающийся
все переделал: теперь 2 модели, 1 вью, 0 проблем.

подскажите пожалуйста как убрать пробел между QTabBar и QTableView
сейчас компаную так:
Код:
    QGridLayout *lay = new QGridLayout;
    lay->addWidget(tabBar, 0, 0);
    lay->addWidget(checkTableView, 1, 0, 4, 1);
    lay->addWidget(deleteButton, 1, 1, 1, 1);
    lay->addWidget(closeButton, 3,1,1,1);
    lay->setRowStretch(2,10);
    setLayout(lay);
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 04, 2011, 10:20 »

Код
C++ (Qt)
lay->setSpacing( 0 );
Записан

Qt 5.11/4.8.7 (X11/Win)
chu
Гость
« Ответ #6 : Март 04, 2011, 10:49 »

Код
C++ (Qt)
lay->setSpacing( 0 );
не совсем то что мне нужно, так остается линия между виджетами.
хочется вид как в QTabWidget
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 04, 2011, 10:54 »

Цитировать
подскажите пожалуйста как убрать пробел между QTabBar и QTableView
Что просил, то и посоветовал Улыбающийся

Цитировать
не совсем то что мне нужно, так остается линия между виджетами.
хочется вид как в QTabWidget
Код
C++ (Qt)
tabBar->setDrawBase(false);
Записан

Qt 5.11/4.8.7 (X11/Win)
chu
Гость
« Ответ #8 : Март 04, 2011, 12:22 »

 Улыбающийся тогда новый вопрос: Как у вьюхи верхнюю грань убрать?
хотя... это тоже не выход. нужно что-то с фоном сделать
« Последнее редактирование: Март 04, 2011, 12:27 от chu » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 04, 2011, 12:26 »

Что такое "верхняя грань вьюхи"?
Записан

Qt 5.11/4.8.7 (X11/Win)
chu
Гость
« Ответ #10 : Март 04, 2011, 12:36 »

вложил 2 файла для примера. 1 - QTabWidget, 2- QTabBar
как сделать тот что с баром похожим на тот что с виджетом?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Март 04, 2011, 12:45 »

Обычными средствами никак, т.к. именно QTabWidget отрисовывает такую рамку.
Записан

Qt 5.11/4.8.7 (X11/Win)
chu
Гость
« Ответ #12 : Март 04, 2011, 13:02 »

Ясно, оставлю как есть.
Спасибо за помощь, GreatSnake
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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