Название: открытие окна с различным содержанием по нажатию разных кнопок Отправлено: eXeLe от Август 15, 2011, 06:55 Qt начал изучать недавно, сегодня озадачился вопросом. опишу подробно. имеем виджет ("parentWid") в котором есть объект textBrowser, при нажатии на ссылку в котором должно открываться окошко с определенной базой данных - в нашем случае "First". вроде все легко - ставим связь между ссылкой и создаем слот "openDatabase()" Код: QObject::connect(textBrowser, SIGNAL(anchorClicked(QUrl)), parentWid, SLOT(openDatabase())); Из него вызываем еще одну связь для открытия нового окна: Код: void parentWid::openDatabase(){ В main.cpp вызываем соединение с базой, выбираем базу данных, создаем окошко, настраиваем его и собссно получив сигнал "openDatabase2()" открываем получившееся окошко: Код: if (!createConnection()) { \\соединяемся с базой Как итог - все работает, все отлично. Но встал вопрос добавления еще кнопок в главный виджет (на деле так же и из других виджетов должно вызываться), которые будут вызывать точно такое же окошко, но с другой базой. Меняться при этом по сути будет только одна строка - Код: model.setTable("first"); Так вот, есть ли способ упростить код, чтоб не копировать всю конструкцию, а при нажатии разных кнопок вызывать данную конструкцию, но с разными базами? Возможно каким то образом можно передать имя БД в качестве переменоой, но вот откуда и как, придумать не смог. Решил попробовать таким образом - убрал из main.cpp создание нашего окна с базой данных, оставив только измененную связь: Код: QObject::connect(&parentWid, SIGNAL(openDatabase2(QString)),&mainWindow, SLOT(showBD(QString))); при этом в классе parentWid поменял Код: void parentWid::openDatabase(){ Код: void parentWid::openDatabase(){ после этого добавил обработку слота "showBD(QString)", в которой и намеревался создавать окно с базой, название которой могло бы быть получено откуда угодно. Код: void mainWindow::showBD(QString bd){ \\записываем имя базы в переменную "bd" при этом программа запускается без ошибок, но при попытке открыть окно с БД, оно сразу же закрывается. |