crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Наследование виджета
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
MJIbIu Дата 14.4.2010, 13:34
 
Цитата(silver47 @ 14.4.2010, 13:51) *
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. Работает, осталось часть кода из конструктора перенести в слот активации второго виджета. Главное что в голове ясно стало как подобное делается :)
:clapping:
silver47 Дата 14.4.2010, 10:39
  main.cpp

#include <QtGui>
#include "widget.h"
#include "start.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  
    Start WELCOME; // создаю первый виджет
    Widget w; // создаю второй
    WELCOME.show(); // показываю первый
    return a.exec();
}


start.cpp

Start::Start(QWidget *parent) : QWidget(parent) , m_settings("SilverSoft","Violations") //конструктор
{
...
}

void Start::slotGo(){
    ...

// как здесь отобразить виджет 2, ведь Start ничего не знает о существовании w?
// вообще нужно бы сдесь создать этот виджет, чтобы конструктор w выполнялся только после нажатия кнопки, но в таком случае
// окошко со вторым виджетом появляется и исчезает :(
}


Простите, я любитель и все никак не могу сообразить как это сделать...

MJIbIu Дата 14.4.2010, 10:25
 
Цитата(silver47 @ 14.4.2010, 6:56) *
Есть два класса, наследованые от 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
 
Цитата(silver47 @ 14.4.2010, 9:25) *
Как тогда передать в первый виджет второй


Не понял. Всмысле передавать первый виджет во второй?

Цитата(silver47 @ 14.4.2010, 9:25) *
Как тогда спрятать первый виджет от глаз подальше?


QWidget::hide ()
или setVisible(0)
silver47 Дата 14.4.2010, 8:25
 
Цитата(molchanoviv @ 14.4.2010, 11:09) *
Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет.


в main создать его а в slotOkBtnClick его показать? Как тогда передать в первый виджет второй, который создан в функции main, и первый виджет ничего не знает о его существовании. Как тогда спрятать первый виджет от глаз подальше?

:blink:
molchanoviv Дата 14.4.2010, 8:09
  Ну по сигналу от кнопки Ок вызывать слот который будет показывать второй виджет.
silver47 Дата 14.4.2010, 5:56
  Есть два класса, наследованые от QWidget, каждый выполняет свою работу. Один из них предоставляет поле для ввода информации и 2 кнопки, Ок + Отмена, нужно чтобы второй запускался и создавался только, если нажата кнопка Ок, при нажатии кнопки отмена, происходило закрытие приложения. Как это возможно сделать?

Спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:01