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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамическая форма  (Прочитано 2061 раз)
arku
Гость
« : Декабрь 13, 2010, 07:05 »

В общем есть QTreeWidget, в нем на сигнал clicked открывается новое окно с QTableView.
Задача.
Сделать форму с QGridLayout, где в позиции 0,0 находится QTreeWidget, изначально в 0,1 пусто. На сигнал clicked - в 0,1 появляется QTableView.
Проблема: QTreeWidget и QTableView описаны в разных функциях и их нельзя добавить в один Layout или я просто не понимаю как это сделать.
Делал вот так, но программа падает после сигнала clicked.

Код:
void MainWindow::ConnectToDB(){
 
...

     QTreeWidget *tree = new QTreeWidget();


for (int i = 0; i < dblist.count(); ++i) {
  QTreeWidgetItem *item = new QTreeWidgetItem(tree);
  item->setText(0, dblist[i]);

}

connect(tree,SIGNAL(clicked(QModelIndex)),
        this,SLOT(itemclicked(QModelIndex)));

QWidget *wd = new QWidget;

QGridLayout *workwithdb = new QGridLayout;

QTableView *selectdbView = new QTableView();
    workwithdb->addWidget(tree,0,0);
    workwithdb->addWidget(selectdbView,0,1);


        wd->setLayout(workwithdb);
        wd->show();
}


Код:
void MainWindow::itemclicked(QModelIndex index)
{

QString selectedDB;
selectedDB = index.data().toString();
db.setDatabaseName(selectedDB);
db.open();
QSqlQueryModel *selectdbModel = new QSqlQueryModel();
selectdbModel->setQuery("SHOW TABLES;");
QTableView * selectdbView = new QTableView();
selectdbView->setModel(selectdbModel);
connect(selectdbView,SIGNAL(clicked(QModelIndex)),this,SLOT(selecttable(QModelIndex)));
QGridLayout *workwithdb = new QGridLayout();
workwithdb->addWidget(selectdbView,0,1);
workwithdb->addWidget(tree,0,0);
QWidget *wd = new QWidget();
wd->setLayout(workwithdb);
wd->show();
}
Записан
arku
Гость
« Ответ #1 : Декабрь 18, 2010, 15:42 »

Может еще какие то данные нужны или вопрос переформулировать?
Записан
Fat-Zer
Гость
« Ответ #2 : Декабрь 18, 2010, 15:50 »

> QGridLayout *workwithdb = new QGridLayout();
1)layout не надо пересоздавать и дерево второй раз в него добавлять тоже не надо
2) на какой строчке сам эпик фейл происходит?
3) зачем грид лейаут, если только два объекта?
4) можно создать вид сразу, но воставить hidden в тру, а при клике показывать
« Последнее редактирование: Декабрь 18, 2010, 15:53 от Fat-Zer » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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