LINUX.ORG.RU

[QT] сообщение владельцу объекта

 


0

0

Здравствуйте! Как правильно послать сообщение владельцу объекта? Т.е. допустим у меня есть

namespace Ui
{
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void AddDialog();
    void FinishedDialog(int);
    void AcceptDialog();
    void RejectDialog();
    void HideDialog();


private:
    Dialog* m_dlg;
    Ui::MainWindow *ui;
};
В нем есть m_dlg, в котором кнопка Add. Как ПРАВИЛЬНО передать владельцу объекта m_dlg, что кнопка add нажата? У меня собственно два варианта было: - создать глобальный объект некоторого класса в котором были бы только сигналы и слоты и объект этого класа занимался бы такими ситуациями, когда нужно передать сообщение от объекта к владельцу. - Создать в диалоге функцию getAddButton() которая возвращает указатель на кнопку и в месте где создается объект подсоединить нужный сигнал к нужному слоту. Но чувствую что ни тот ни другой вариант не красивые. Подскажите пожалуйста.


Рекомендую почитать документацию поставляемую с кутями =) там очень хорошие примеры работы с кутями. вот пример работы с объектом диалога

MyQdialog dd(); // создаем объект класса диалог.

if(dd.exec()){

QString aa=dd.get_aa(); // тут из отработанного диалога публичным методом забираем строчку. все просто до идиотизма.

}

MikeDM ★★★★★
()

если я правильно понял вопрос:

// Dialog.h
…
class Dialog : … {
…
private slots:
    void on_addButton_clicked();
…
signals:
    void addClicked();
…
};
…
// Dialog.cpp
…
Dialog::on_addButton_clicked() {
    emit addClicked();
}
…
// MainWindow.h
class MainWindow : … {
…
private slots:
    void on_m_dlg_addClicked();
…
}
// MainWindow.cpp
MainWindow::on_m_dlg_addClicked() {
    /* add your code here */
}

arsi ★★★★★
()
Ответ на: комментарий от MikeDM

У меня не модальный диалог. Поэтому он будет работать пока юзеру не надоесть добавлять записи. Поэтому неподходит ваш вариант. Мне нужно по сигналу от диалога забирать от тудава записи. Вроде уже реализовал посредством добавления функции QPushButton* getAddButton() в диалог. И добавил в MainWindow запись [code] QObject::connect(m_dlg->getAddButton(), SIGNAL(clicked()),this, SLOT(AddButton_Dialog())); [/code] И вроде это работает, но боюсь наткнуться на что-нибудь о чем я не знаю. Например коннект происходит в MainWindow, а указатль - то на кнопку действителен до тех пор пока диалог жив, а после этого кнопка умирает. Может этот коннект нужно прибить когда диалог умирает?

jeep
() автор топика
Ответ на: комментарий от jeep

> Может этот коннект нужно прибить когда диалог умирает?

Если диалог умирает, коннект отваливается автоматически. Это описано в доке.

Ximen ★★★★
()

лучше создать сигнал у диалога и кунуть на него сигнал от кнопки.
а владельца m_dlg приконнектить уже к диалогу

>Вроде уже реализовал посредством добавления функции QPushButton* getAddButton() в диалог.

говнокод!

xydo ★★
()
Ответ на: комментарий от xydo

в общем, как сказал arsi, но уже без лишней on_addButton_clicked

xydo ★★
()

да йопрст ... у классов которые имеют в предках QDialog есть слот exec() возвращающий 0 или 1 в зависимости от accept or reject.

ТС отталкивайся от этого.

И вообще весьма рекомендую почитать документацию к кутям, что бы чуш не пороть.

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

Спасибо всем за ответы проблема решена добавлением сигнала в диалог, те так как написано выше. Доки почитываю, но чтобы засесть и все прочитать просто времени нет.

jeep
() автор топика
Ответ на: комментарий от Delay

Можно и так было. Но мне очень не хотелось выводить в публик всю форму, тк она нарисована в QT Disigner. Там создается приватное свойство Ui::Dialog * dlg - вроде как указатель на себя. Поэтому чтобы вытащить кнопку в паблик наверно нужно засунуть этот указатель в паблик. А я почему-то не захотел так делать - сам не знаю почему.

jeep
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.