Здравствуйте, гость ( Вход | Регистрация )
MJIbIu | Дата 14.4.2010, 13:34 |
MJIbIu, и слот второго уже подает сигнал для закрытия первого виджета смотря какой алгоритм и что ты хочешь можно и так сделать QObject::connect(&w, SIGNAL(signalOK()), &w, SLOT(close())); // QObject::connect(&w2, SIGNAL(signal()), &w, SLOT(slotVisible())); можно к одному сигналу разные слоты присоединить. И не ждать что второй виджет вышлет сигнал на закрытие первого виджета |
|
silver47 | Дата 14.4.2010, 12:51 |
MJIbIu, Я не использую конструктор для создания окошек, все ручками пока делаю смысл приблизительно понял при подаче сигнала ОК от первого виджета выполняется содержимое slot второго (нужно будет туда чатсть кода конструктора перенести), и слот второго уже подает сигнал для закрытия первого виджета вроде все просто... как раньше не дошел Спасибо MJIbIu. Работает, осталось часть кода из конструктора перенести в слот активации второго виджета. Главное что в голове ясно стало как подобное делается |
|
silver47 | Дата 14.4.2010, 10:39 |
main.cpp
start.cpp
Простите, я любитель и все никак не могу сообразить как это сделать... |
|
MJIbIu | Дата 14.4.2010, 10:25 |
Есть два класса, наследованые от QWidget, каждый выполняет свою работу. Один из них предоставляет поле для ввода информации и 2 кнопки, Ок + Отмена, нужно чтобы второй запускался и создавался только, если нажата кнопка Ок, при нажатии кнопки отмена, происходило закрытие приложения. Как это возможно сделать? Спасибо. CODE #include <QtGui/QApplication> #include "widget.h" #include "widget2.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; widget2 w2; QObject::connect(&w, SIGNAL(signalOK()), &w2, SLOT(slot())); QObject::connect(&w2, SIGNAL(signal()), &w, SLOT(slotVisible())); QObject::connect(&w, SIGNAL(signalCancel()), &w, SLOT(close())); w.show(); return a.exec(); } CODE #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QObject::connect(ui->pushOK, SIGNAL(clicked()), this, SLOT(slotOK())); QObject::connect(ui->pushCancel, SIGNAL(clicked()), this, SLOT(slotCancel())); } Widget::~Widget() { delete ui; } void Widget::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } void Widget::slotOK() { emit signalOK(); } void Widget::slotVisible() { close(); } void Widget::slotCancel() { emit signalCancel(); } CODE #include "widget2.h" #include "ui_widget2.h" widget2::widget2(QWidget *parent) : QWidget(parent), ui(new Ui::widget2) { ui->setupUi(this); } widget2::~widget2() { delete ui; } void widget2::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } void widget2::slot() { show(); emit signal(); } Определение класса я думаю выкладывать не надо. хз мб я и криво сделал где можно что улучшит напишите плиз буду признателен |
|
molchanoviv | Дата 14.4.2010, 8:44 |
Как тогда передать в первый виджет второй Не понял. Всмысле передавать первый виджет во второй? Как тогда спрятать первый виджет от глаз подальше? QWidget::hide () или setVisible(0) |
|
silver47 | Дата 14.4.2010, 8:25 |
Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет. в main создать его а в slotOkBtnClick его показать? Как тогда передать в первый виджет второй, который создан в функции main, и первый виджет ничего не знает о его существовании. Как тогда спрятать первый виджет от глаз подальше? |
|
molchanoviv | Дата 14.4.2010, 8:09 |
Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет. | |
silver47 | Дата 14.4.2010, 5:56 |
Есть два класса, наследованые от QWidget, каждый выполняет свою работу. Один из них предоставляет поле для ввода информации и 2 кнопки, Ок + Отмена, нужно чтобы второй запускался и создавался только, если нажата кнопка Ок, при нажатии кнопки отмена, происходило закрытие приложения. Как это возможно сделать? Спасибо. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 13:01 |