Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xitryuga от Август 25, 2014, 01:07



Название: Создание нового виджета
Отправлено: xitryuga от Август 25, 2014, 01:07
День добрый.
Помогите пожалуйста, больше надежды не у кого спросить нубский вопрос)

Как вызвать окно виджета кнопкой из другого виджета

допустим есть main.cpp:
Код:
...
QWidget *wgt = new QWidget;
QWidget *wgt1 = new QWidget;
QPushButton *btn = new QPushButton("make new widget",wgt);
 
wgt->show();
...

надо чтобы при нажатии на btn вылезал виджет wgt1.

свзывал так:
Код:
QObject::connect(btn, SIGNAL(clicked()), &MyClass, SLOT(showNewWidget(wgt1)));

в MyClass showNewWidget описан вот так:
Код:
...
MyClass::showNewWidget(QWidget *widgets_sub)
{
     widgets_sub->show();
}

Хелп! ???


Название: Re: Создание нового виджета
Отправлено: kambala от Август 25, 2014, 02:27
обсуждалось сто раз на форуме, воспользуйся поиском или почитай книжку/документацию


Название: Re: Создание нового виджета
Отправлено: FakeMoNEy от Август 25, 2014, 03:40
Ошибка в QObject::connect(), обрати внимание на параметры сигналов/слотов. В книге Шлее Qt все подробно описано.


Название: Re: Создание нового виджета
Отправлено: __Heaven__ от Август 25, 2014, 07:23
Ну, не всем дано вникнуть в концепцию сигналов и слотов с ходу. Я тоже не был исключением.
Код
C++ (Qt)
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
 
   QPushButton* btn1 = new QPushButton("Button 1"),
              * btn2 = new QPushButton("Button 2");
 
   QObject::connect(btn1, SIGNAL(clicked()), btn2, SLOT(show()));
 
   btn1->show();
   return a.exec();
}
 
P.S.: внутри класса тоже можно делать connect. В этом случае приставку QObject:: можно опустить.


Название: Re: Создание нового виджета
Отправлено: xitryuga от Август 25, 2014, 11:04
Все понял, получилось.  Тут либо "утро мудреннее вечера", либо я слишком туп)


Название: Re: Создание нового виджета
Отправлено: 8Observer8 от Август 26, 2014, 17:35
xitryuga, привет! Специально для вас написал простое демо-приложение: https://github.com/8Observer8/CallDialog

Работает оно так:
- Пользователь нажимает кнопку "Settings". Появляется диалоговое окно "Settings":
(http://i.pixs.ru/storage/6/8/7/293png_1212902_13576687.png)

- Пользователь нажимаем кнопку "Ok" и данные о настройках выводятся во второе окно:
(http://i6.pixs.ru/storage/6/9/2/294png_7714278_13576692.png)