Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Piton4eg от Август 06, 2009, 15:58



Название: Просьба помочь
Отправлено: Piton4eg от Август 06, 2009, 15:58
Не знаю может не в ту тему пишу, но связано с созданием пользовательского интерфейса.
Суть в том, что мне необходимо создать программу которая считывает из файла данные и отображает полученную картинку, саму программу отображения рисунка я написал, но при создании интерфейса программы возникают сложности, скорее всего проблема с сигналами-слотами, но т.к. я ещё мало пользуюсь этой программой то не могу определить, если кто знает помогите пожалуйста

содержимое файла main.cpp
Цитировать
#include <QtGui/QApplication>
#include "ogl_paint.h"
#include "ui_prosto.h"
#include "pForm.h"
#include <QSpacerItem>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget w;

   QHBoxLayout * phLay;
   QVBoxLayout * pvLay;
   ogl_paint * pwOGL;
   pOGLForm * pf;
   QSpacerItem * psp;

   phLay = new QHBoxLayout;
   pvLay = new QVBoxLayout;
   pwOGL = new ogl_paint;
   pwOGL->setMinimumSize(QSize(500,500));
   psp = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
   pf = new pOGLForm;

   phLay->addWidget(pwOGL);
   pvLay->addWidget(pf);
   pvLay->addItem(psp);

   phLay->addLayout(pvLay);

   w.setLayout(phLay);

   QObject::connect(pf->pb_exit, SIGNAL(clicked()), &a, SLOT(quit()));
   QObject::connect(pf->pb_paint, SIGNAL(clicked()), pwOGL, SLOT(SlotPaint()));
   QObject::connect(pf->pb_path, SIGNAL(clicked()), pwOGL, SLOT(SlotLoad(QString)));
   QObject::connect(pf->chb_temp, SIGNAL(stateChanged(int)), pwOGL, SLOT(SlotTemp(int)));
   QObject::connect(pf->chb_set, SIGNAL(stateChanged(int)), pwOGL, SLOT(SlotSet(int)));
   QObject::connect(pf->chb_line_tok, SIGNAL(stateChanged(int)), pwOGL, SLOT(SlotLines(int)));


   w.show();

   return a.exec();

}

Во вложении файлы, в которых как раз основные функции, используемые в программе

Кто может помочь буду очень признателен, т.к. скоро сдавать отчет по практике, а я никак не могу понять в чем именно проблема


Название: Re: Просьба помочь
Отправлено: alex12 от Август 14, 2009, 15:01
Я смотрю, что еще ui-файл используется.
Цитировать
#include "ui_prosto.h"
Обычно делается отдельный виджет типа MainWindow, а не пишется все в main().

Если задача все еще актуальна, то выложи архив всего проекта.


Название: Re: Просьба помочь
Отправлено: Piton4eg от Август 24, 2009, 13:04
Цитировать
Я смотрю, что еще ui-файл используется.
да используется ui-файл, по крайней мере мне говорили делать так)

Цитировать
Если задача все еще актуальна, то выложи архив всего проекта.
Задача всё ещё актуальна. Архив по ссылке http://ifolder.ru/13679902 (http://ifolder.ru/13679902)


Название: Re: Просьба помочь
Отправлено: ритт от Август 24, 2009, 13:12
я так понимаю, "саму программу отображения рисунка я написал" следует читать как "саму программу отображения рисунка мне написали"


Название: Re: Просьба помочь
Отправлено: Piton4eg от Август 24, 2009, 14:03
нет, писал я, просто некоторые моменты которые я не понимал, мне объяснял мой руководитель, т.к. у меня это первый опыт работы с Qt
если бы мне написали, то я бы аналогично и с интерфейсом поступил


Название: Re: Просьба помочь
Отправлено: ритт от Август 24, 2009, 14:25
пока что пост я читаю как "соберите мою программу и скажите что в ней не работает"...
опиши проблему и задай вопрос.


Название: Re: Просьба помочь
Отправлено: alex12 от Август 24, 2009, 14:55
Общая структура проекта GUI сделана совсем криво.

Проект не собирается т.к. передача имени открываемого файла сделана ... ээээ ... совсем неправильно.
В тексте виджета делается ссылка на форму (о которой сам виджет ничего не знает).

Не ломая весь проект в целом, я смог его починить только богопротивным методом добавления глобального указателя
на QLineEdit из формы. По-хорошему нужно переделывать весь GUI.

Естественно, я не смог проверить т.к. в проекте нет файла для обработки.

Добавлено:

main.cpp:
  QLineEdit *le_filename;
  le_filename = pf->le_path;

ogl_paint.cpp:
  #include <QLineEdit>
  extern QLineEdit *le_filename;
  QString    F=le_filename->text();

Вот diff-файл. Надеюсь разбирешься.

Код:
diff --git a/main.cpp b/main.cpp
index 8de1d3b..9475502 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,7 @@
 #include "pForm.h"
 #include <QSpacerItem>
 
+QLineEdit *le_filename;
 
 int main(int argc, char *argv[])
 {
@@ -24,7 +25,7 @@ int main(int argc, char *argv[])
    psp = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
    pf = new pOGLForm;
 
-
+   le_filename = pf->le_path;
 
 
    phLay->addWidget(pwOGL);
diff --git a/ogl_paint.cpp b/ogl_paint.cpp
index 28e70cc..496b203 100644
--- a/ogl_paint.cpp
+++ b/ogl_paint.cpp
@@ -7,6 +7,8 @@
 #include <qcolor.h>
 #include <math.h>
 
+#include <QLineEdit>
+
 ogl_paint::ogl_paint(QWidget *pwgt/*= 0*/) : QGLWidget(pwgt)
 {
    //load();
@@ -91,7 +93,9 @@ void ogl_paint::SlotLines(int nLines)
 }
 void ogl_paint::SlotLoad()
 {
-    QString    F=pf->le_path->text();
+    extern QLineEdit *le_filename;
+
+    QString    F=le_filename->text();
     PathFile=F;
 
     QFile file(PathFile);


Название: Re: Просьба помочь
Отправлено: Piton4eg от Август 24, 2009, 15:26
2alex12
большое спасибо, понял в чём косяк, буду в этом ковыряться

а то что общая структура сделана криво, мне это уже говорили, но по другому к сожалению не умею :(

спасибо


Название: Re: Просьба помочь
Отправлено: alex12 от Август 24, 2009, 16:12
См. вложение к посту. Там я переделал GUI по своему вкусу.

Функционал сделал только кнопка "Выход" и "Загрузить". Посмотри что там к чему.