QT4.6 как заставить виджет открываться по нажатию кнопки?

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Dice
рядовой
Сообщения: 29
Зарегистрирован: 2009-02-26 17:09:51
Контактная информация:

QT4.6 как заставить виджет открываться по нажатию кнопки?

Непрочитанное сообщение Dice » 2010-09-18 21:54:39

Подскажите пожалуйста по сабжу.
Подобным образом хочу связать два окна, грубо говоря одно окно с кнопкой ОК - нажимаем ОК открывается главное окно, окно с кнопкой ОК закрывается.

Непонятно два момента:
1. Нужно ли добавлять для того окна. которое открывается по клику на кнопку ОК (допустим класс MainWindow) что-либо в следующий блок или нет:

Код: Выделить всё

int main (int argc, char** argv)
{
    QApplication app(argc, argv);
    FormOk	ok;

    
ok.show();
    
    return app.exec();
}
2. Непонятно какое действие нужно привязать к кнопке, чтобы виджет открылся. Я так полагаю нечто подобное есть неправильно:

Код: Выделить всё

void FormOk::ok() {
MainWindow	mw;
mw.show();
}
Быть глупым не страшно: кругом все свои.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Dambo
ефрейтор
Сообщения: 61
Зарегистрирован: 2009-11-27 22:29:58

Re: QT4.6 как заставить виджет открываться по нажатию кнопки

Непрочитанное сообщение Dambo » 2010-09-20 9:14:46

Видимо вы совсем не знакомы с Qt, в этой библиотеки связи с объектами принято связывать сигналами и слотами.
Вкратце все классы должны наследоваться от QObject или производных от него классов, что бы поддерживать сигналы и слоты.
Скачайте в интернете книгу по qt, советую Макса Шлее "qt для профессионалов" там подробно всё описанно.
пс. лучше купить в бумажном виде как я :-D , qt с собой таскает документацию QtAssistant всё что не работает можно сверять с тем что там написано)

Вот то что вы хотели:

Код: Выделить всё

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton *buttOK = new QPushButton;
    QMainWindow *mw = new QMainWindow;
    buttOK->setText("OK");
    buttOK->show();
    QObject::connect(buttOK,SIGNAL(clicked()),buttOK,SLOT(close()));
    QObject::connect(buttOK,SIGNAL(clicked()),mw,SLOT(show()));


    return a.exec();
}

Аватара пользователя
Dice
рядовой
Сообщения: 29
Зарегистрирован: 2009-02-26 17:09:51
Контактная информация:

Re: QT4.6 как заставить виджет открываться по нажатию кнопки

Непрочитанное сообщение Dice » 2010-09-20 15:01:40

Благодарю за ответ :)
Именно эту книгу я и скачал и распечатал.
Но там я не нашел подобного примера, и даже не думал что это один из стандартных слотов, автор пишет забористо, но подобные мелочи иногда обходит стороной не делая на них сильного акцента. Так что пойду искать набор стандартных слотов.
Быть глупым не страшно: кругом все свои.