Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2013, 15:55   #1
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию Qt вызов окна

Добрый день! подскажите, пожалуйста, как при нажатии на кнопку на форме вызвать окно (на этом окне будут располагаться объекты кнопки, поля редактирования и т.д.).
novicepro вне форума Ответить с цитированием
Старый 10.10.2013, 23:55   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

MyWindow - объект вашего окна (пример)

Код:
MyWindow.show();
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 11.10.2013, 00:01   #3
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

при нажатии на кнопку вызвать вторичное окно
novicepro вне форума Ответить с цитированием
Старый 11.10.2013, 07:59   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Поместите вышенаписанный код (точнее что-то подобное) в соответствующую функцию-слот вашей "основной формы".


По теме ссылки:
Signals & Slots
Widget (в Qt окно - частный случай виджета).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 11.10.2013 в 08:02.
ROD вне форума Ответить с цитированием
Старый 11.10.2013, 11:58   #5
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от novicepro Посмотреть сообщение
при нажатии на кнопку вызвать вторичное окно
Как было сказано почитать про сигналы и слоты.

Это записывается в конструкторе вашего главного виджета:

Код:
connect(ui->pushButton, SIGNAL(click()), MyWidget, SLOT(show()));
Думаю что для чего расписывать не нужно, но если возникнут вопросы можешь обращаться.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.10.2013, 12:56   #6
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

Спасибо большое. расписывать действительно не надо. все понятно
novicepro вне форума Ответить с цитированием
Старый 11.10.2013, 13:29   #7
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от novicepro Посмотреть сообщение
Спасибо большое. расписывать действительно не надо. все понятно
Единственно добавлю то что у MyWidget не должно быть родителя что бы это было отдельным окном, иначе оно появится на главном виджите.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 11.10.2013, 17:05   #8
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

Еще один вопрос, чуть не по теме. как программно прописать Horizontal Spacer?
novicepro вне форума Ответить с цитированием
Старый 15.10.2013, 15:15   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

По поводу вопроса темы...

Запустите и внимательно изучите следующий пример, который я написал специально для Вас



DialogByButton.pro
Код:
SOURCES += \
    main.cpp \
    mainwindow.cpp \
    dialog.cpp

HEADERS += \
    mainwindow.h \
    dialog.h
main.cpp
Код:
#include <QApplication>
#include "mainwindow.h"

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

    MainWindow window;
    window.show();

    return app.exec();
}
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    
signals:
    void sendName(QString name);
    
private slots:
    void callDialog();

private:
    QLineEdit *leName;
};

#endif // MAINWINDOW_H
mainwindow.cpp
Код:
#include "mainwindow.h"
#include "dialog.h"
#include <QWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    // Controls
    QLabel *lblName = new QLabel(tr("Enter your name:"));
    leName = new QLineEdit;
    QPushButton *btnCallDialog = new QPushButton(tr("Call Dialog"));

    // Layout
    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(lblName, 0, 0);
    mainLayout->addWidget(leName, 0, 1);
    mainLayout->addWidget(btnCallDialog, 1, 0, 1, 2);

    // Set center widget
    QWidget *widget = new QWidget;
    widget->setLayout(mainLayout);
    this->setCentralWidget(widget);

    connect(btnCallDialog, SIGNAL(clicked()), this, SLOT(callDialog()));
}

void MainWindow::callDialog() {
    Dialog dialog;
    connect(this, SIGNAL(sendName(QString)), &dialog, SLOT(showName(QString)));
    emit sendName(leName->text());
    dialog.exec();
}
dialog.h
Код:
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    
signals:
    
public slots:
    void showName(QString name);

private:
    QLabel *lblName;
};

#endif // DIALOG_H
dialog.cpp
Код:
#include "dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent)
{
    // Controls
    lblName = new QLabel(tr(""));

    // Layouts
    QHBoxLayout* mainLayout = new QHBoxLayout(this);
    mainLayout->addWidget(lblName);

    // Set Layout
    this->setLayout(mainLayout);
}

void Dialog::showName(QString name) {
    lblName->setText(name);
}
8Observer8 вне форума Ответить с цитированием
Старый 15.10.2013, 16:46   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от novicepro Посмотреть сообщение
Еще один вопрос, чуть не по теме. как программно прописать Horizontal Spacer?
Опишите подробнее, что Вы хотите. Я не понимаю.

В моём коде я немного перемудрил. Вместо конекта можно написать просто вызов фукнции.

То есть вместо вот этого кода:

Код:
void MainWindow::callDialog() {
    Dialog dialog;
    connect(this, SIGNAL(sendName(QString)), &dialog, SLOT(showName(QString)));
    emit sendName(leName->text());
    dialog.exec();
}
Вот этот:
Код:
void MainWindow::callDialog() {
    Dialog dialog;
    dialog.showName(leName->text());
    dialog.exec();
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов окна MyLastHit Свободное общение 12 14.07.2011 13:30
вызов окна RedScreenOfLife Общие вопросы по Java, Java SE, Kotlin 1 24.05.2011 16:23
PrintDialog вызов окна romanzi Компоненты Delphi 2 05.02.2011 19:22
Вызов окна сохранить как mephist Microsoft Office Excel 7 23.07.2009 16:00
Вызов диалогового окна Sapsan Общие вопросы C/C++ 6 30.03.2009 23:03