Наследование виджета |
Здравствуйте, гость ( Вход | Регистрация )
Наследование виджета |
silver47 |
14.4.2010, 5:56
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Есть два класса, наследованые от QWidget, каждый выполняет свою работу. Один из них предоставляет поле для ввода информации и 2 кнопки, Ок + Отмена, нужно чтобы второй запускался и создавался только, если нажата кнопка Ок, при нажатии кнопки отмена, происходило закрытие приложения. Как это возможно сделать?
Спасибо. |
|
|
molchanoviv |
14.4.2010, 8:09
Сообщение
#2
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет.
|
|
|
silver47 |
14.4.2010, 8:25
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет. в main создать его а в slotOkBtnClick его показать? Как тогда передать в первый виджет второй, который создан в функции main, и первый виджет ничего не знает о его существовании. Как тогда спрятать первый виджет от глаз подальше?
Причина редактирования: Убрал дубль.
|
|
|
molchanoviv |
14.4.2010, 8:44
Сообщение
#4
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
|
|
|
MJIbIu |
14.4.2010, 10:25
Сообщение
#5
|
Студент Группа: Участник Сообщений: 38 Регистрация: 14.4.2010 Пользователь №: 1630 Спасибо сказали: 3 раз(а) Репутация: 0 |
Есть два класса, наследованые от 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(); } Определение класса я думаю выкладывать не надо. хз мб я и криво сделал где можно что улучшит напишите плиз буду признателен |
|
|
silver47 |
14.4.2010, 10:39
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
main.cpp
start.cpp
Простите, я любитель и все никак не могу сообразить как это сделать... |
|
|
silver47 |
14.4.2010, 12:51
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
MJIbIu,
Я не использую конструктор для создания окошек, все ручками пока делаю смысл приблизительно понял при подаче сигнала ОК от первого виджета выполняется содержимое slot второго (нужно будет туда чатсть кода конструктора перенести), и слот второго уже подает сигнал для закрытия первого виджета вроде все просто... как раньше не дошел Спасибо MJIbIu. Работает, осталось часть кода из конструктора перенести в слот активации второго виджета. Главное что в голове ясно стало как подобное делается |
|
|
MJIbIu |
14.4.2010, 13:34
Сообщение
#8
|
Студент Группа: Участник Сообщений: 38 Регистрация: 14.4.2010 Пользователь №: 1630 Спасибо сказали: 3 раз(а) Репутация: 0 |
MJIbIu, и слот второго уже подает сигнал для закрытия первого виджета смотря какой алгоритм и что ты хочешь можно и так сделать QObject::connect(&w, SIGNAL(signalOK()), &w, SLOT(close())); // QObject::connect(&w2, SIGNAL(signal()), &w, SLOT(slotVisible())); можно к одному сигналу разные слоты присоединить. И не ждать что второй виджет вышлет сигнал на закрытие первого виджета |
|
|
Текстовая версия | Сейчас: 23.11.2024, 8:20 |