Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: arku от Декабрь 13, 2010, 07:05



Название: Динамическая форма
Отправлено: 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();
}


Название: Re: Динамическая форма
Отправлено: arku от Декабрь 18, 2010, 15:42
Может еще какие то данные нужны или вопрос переформулировать?


Название: Re: Динамическая форма
Отправлено: Fat-Zer от Декабрь 18, 2010, 15:50
> QGridLayout *workwithdb = new QGridLayout();
1)layout не надо пересоздавать и дерево второй раз в него добавлять тоже не надо
2) на какой строчке сам эпик фейл происходит?
3) зачем грид лейаут, если только два объекта?
4) можно создать вид сразу, но воставить hidden в тру, а при клике показывать