crossplatform.ru

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

registr
  опции профиля:
сообщение 16.8.2010, 11:23
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

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




Репутация:   1  


Не могу никак разобраться с появлением диалогового окна в главном окне. Помогите, пожалуйста, разобраться. Вот сам код:

createdialog.h
#ifndef CREATEDIALOG_H 
#define CREATEDIALOG_H

#include <QDialog.h>
#include "mainwindow.h"

class CreateDialog : public QDialog //, public MainWindow
{
   Q_OBJECT; // Макрос Q_0BJECT необходимо задавать в начале определения любого класса, содержащего сигналы или слоты.
   
   private slots:
      void okPush();
      void sph4();
      void sph5();
   
   private:   
      QLabel *info;
      
      QRadioButton *sph4Button;
      QRadioButton *sph5Button;
   
      QPushButton *okButton; 
      QPushButton *cancelButton;
   
   public: 
      CreateDialog(QWidget *parent=0); // !здесь происходит ошибка!
      
}; 
#endif


createdialog.cpp
#include <QtGui>
#include "mainwindow.h"
#include "createdialog.h"
#include "point3D.h" 

static int iteration=4;

CreateDialog::CreateDialog(QWidget *parent) : QDialog(parent)
{
   QTextCodec *codec = QTextCodec::codecForName("CP1251"); // подключаю текстовые кодеки
   QTextCodec::setCodecForTr(codec);   
         
   this->setWindowTitle(tr("Создать карту...")); // название
   
   this->setModal(true); // модальное окно
   
   info = new QLabel(tr("Выберете, пожалуйста, детализацию карты:"), this);
   
   sph4Button = new QRadioButton(tr("Низкая"), this);
   sph5Button = new QRadioButton(tr("Средняя"), this);     
   
   sph4Button->setChecked(true);
      
   connect(sph4Button, SIGNAL(clicked()), this, SLOT(sph4()));
   connect(sph5Button, SIGNAL(clicked()), this, SLOT(sph5()));        
   
   okButton = new QPushButton(tr("Ok"));
   cancelButton = new QPushButton(tr("Отмена"));
   
   connect(okButton, SIGNAL(clicked()), this, SLOT(okPush()));
   connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));   
   
   QVBoxLayout *layout1 = new QVBoxLayout;
   
   QVBoxLayout *layout2 = new QVBoxLayout;
   QHBoxLayout *layout3 = new QHBoxLayout; 
   
   layout2->addWidget(info);   
   layout2->addWidget(sph4Button);
   layout2->addWidget(sph5Button);   
   
   layout3->addWidget(okButton);
   layout3->addWidget(cancelButton);
   
   layout1->addLayout(layout2);
   layout1->addLayout(layout3);
   
   setLayout(layout1); // устанавливает менеджер компоновки для окна
   setFixedHeight(sizeHint().height()); // возвращает "идеальный" размер виджета 
   
   this->show();              
} 

void CreateDialog::okPush() {set_temp(iteration); this->close();}

void CreateDialog::sph4() {iteration=4;}

void CreateDialog::sph5() {iteration=5;}


В главном окне Диалог вызывается соответственно:
CreateDialog *create_dialog = new CreateDialog;


При компиляции выдается сообщение:
macro "CreateDialogW" requires 4 arguments, but only 1 given
макрос "CreateDialogW" требует 4 аргумента, но дан только 1

Выдается ошибка в файле createdialog.h в конструкторе
CreateDialog(QWidget *parent=0); // !здесь происходит ошибка!

declaration does not declare anything
декларация ничего не декларирует

Бью голову, не понимаю в чем дело... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 17.8.2010, 12:19
Сообщение #2


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

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

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




Репутация:   44  


void MainWindow::createMap()
{
    MyDialog dlg( this );
    if( dlg.exec() )
    {
        // Сюда попадаем, если пользователь выбрал Ok
        int detailed_maps = dlg.getDetailedMaps();    // Спрашиваем у диалога, какую детализацию выбрал пользователь
        create_new( detailed maps );
    }
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
registr
  опции профиля:
сообщение 17.8.2010, 12:29
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

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




Репутация:   1  


Цитата(BRE @ 17.8.2010, 13:19) *
void MainWindow::createMap()
{
    MyDialog dlg( this );
    if( dlg.exec() )
    {
        // Сюда попадаем, если пользователь выбрал Ok
        int detailed_maps = dlg.getDetailedMaps();    // Спрашиваем у диалога, какую детализацию выбрал пользователь
        create_new( detailed maps );
    }
}

О, спасибо!

Цитата(Алексей1153 @ 17.8.2010, 13:18) *
Если грамотно - то лучше сделать класс-менеджер карты, ну а так - отправить сигнал от MyDialog к MainWindow, в слоте которого вызвать нужную функцию. Или саму эту функцию слотом и назначить

Гы, а как отправить сингал? Как я понимаю сингал определяется только в классе и является функцией-членом данного класса. А тут получается два разных объекта разных классов со своими функциями-методами, вчера весь вечер голову ломал :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 17.1.2025, 22:51