crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QT интерфейс, ООП, У меня возник вопрос по ООП +QT
Гость_=DENIS=_*
сообщение 10.2.2012, 19:21
Сообщение #1





Гости








    


Такой вопрос. В документации QT все примеры построены таким образом, создается класс, унаследованный от QWidget (QMainWIndow, ...) и в нем уже производятся действия: построение интерфейса, чтение файла, работа с сетью и т.п. Но мне кажется, что не правильно совмещать класс интерфейса и свои алгоритмы работы программы: работа с файлами, работа с сетью и т.п. Мне кажется, что надо создавать какой-то класс (допустим class Manager) который управляет и интерфейсом(GUI) и основной работой программы. Я прав или нет? Подскажите.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.2.2012, 19:30
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Прав. В идиале GUI должен легко убираться/заменяться на другой без ущерба для функциональности программы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 10.2.2012, 19:48
Сообщение #3





Гости








    


Цитата(BRE @ 10.2.2012, 19:30) *
Прав. В идиале GUI должен легко убираться/заменяться на другой без ущерба для функциональности программы.


Так почему же в офф документации так пишут, для наглядности?

И такой вопрос, как в QtDesignet назначить для основной формы основной мнеджер компановки, назначаемый функцией setLayout(QLayout *l); Что-то не нашел такого.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 10.2.2012, 19:51
Сообщение #4





Гости








    


И как мне тогда лучше поступать, делать в С++ что-то подобное на интерфейсы в Java или передавать указатели на функции в интерфейс, чтобы эти функции выполнялись по нажатию кнопки?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.2.2012, 20:03
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:48) *
Так почему же в офф документации так пишут, для наглядности?

Это примеры, показывающие функционал Qt, а не то как правильно писать программы с использованием Qt.

Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:48) *
И такой вопрос, как в QtDesignet назначить для основной формы основной мнеджер компановки, назначаемый функцией setLayout(QLayout *l); Что-то не нашел такого.

Выбираешь саму форму и выбираешь тип компановки в меню "Форма".

Цитата(Гость_=DENIS=_* @ 10.2.2012, 20:51) *
И как мне тогда лучше поступать, делать в С++ что-то подобное на интерфейсы в Java или передавать указатели на функции в интерфейс, чтобы эти функции выполнялись по нажатию кнопки?

В тех классах, объекты которых будут взаимодействовать с GUI, определять слоты и соединять сигналы от кнопок со слотами этих объектов-обработчиков.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 12.2.2012, 10:05
Сообщение #6





Гости








    


Спасибо за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 22.2.2012, 22:51
Сообщение #7





Гости








    


Есть класс WaitDialog унаследованный от QDialog

#include "waitdialog.h"
#include <QtCore/QString>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QHBoxLayout>

WaitDialog::WaitDialog(QObject *parrent):QDialog(parrent)
{
    label = new QLabel(tr("Wait please"));
    cancelButton = new QPushButton(tr("Cancel"));
    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(label);
    layout->addWidget(cancelButton);
    setLayout(layout);
}

void WaitDialog::setText(QString mes)
{
    label->setText(mes);
}

QString WaitDialog::getText()
{
    return label->text();
}


Как правильно свзяать сигнал кнопки с внешним слотом (находится в основном классе Manger). Сделать механизм, подобный интерфейса, или сдалеать в WaitDialog функцию, в которую буду передавать SLOT(mySlot())???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 23.2.2012, 9:37
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 23.2.2012, 14:46
Сообщение #9





Гости








    


Цитата(RazrFalcon @ 23.2.2012, 9:37) *
Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_=DENIS=_*_*
сообщение 23.2.2012, 14:48
Сообщение #10





Гости








    


Цитата(RazrFalcon @ 23.2.2012, 9:37) *
Можно в WaitDialog передавать указатель на класс Manger.
WaitDialog::WaitDialog(Manger *manger, QObject *parrent):QDialog(parrent)
{
    cancelButton = new QPushButton(tr("Cancel"));
    connect(cancelButton,SIGNAL(clicked()),manger,SLOT(mySlot());
}

Или при создании самого WaitDialog в классе Manger конектить его с вашим слотом в WaitDialog:
//в Manger создаем waitDialog, а затем:
    connect(waitDialog,SIGNAL(cancelButton_clcked(),this,SLOT(mySlot());

void WaitDialog::cancelButton_clcked() {
}
    //...
{


Да, так можно. А может попробывать сделать что-то подобное интерфейсу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2020, 1:58