Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не подключается макрос Q_OBJECT 
V
    Опции темы
Ober
Дата 11.2.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Посмотрите пожалуйста на этот код:
Код

#ifndef LINEDRAW_H
#define LINEDRAW_H
#include <QWidget>

class QPaintDevice;

class LineDraw : public QWidget{
Q_OBJECT

  public:
    LineDraw( QWidget *pwgt = 0 );
    void calculate();
    void buttons();

  public slots:
      void slotDraw ();

  private:
    QPoint p1;
    QPoint p2;
    QPoint p3;
    QPoint p4;
    int resx, resy, a1x, b1y, c1, a2x, b2y, c, ;
};

#endif // LINEDRAW_H



Код

#include "LineDraw.h"
#include<QtGui>

LineDraw::LineDraw( QWidget *pwgt ) :
    QWidget( pwgt ), p1( 300, 300 ), p2( 300, 300 ), p3( 300, 300 ), p4( 300 , 300 )
{

}

void LineDraw::slotDraw()
{
    QLabel *lbl = new QLabel;
    QPainter painter(lbl);
    painter.setPen(QPen( Qt::black , 3 ) );
    painter.drawLine( QPointF( 300, 20 ),QPointF( 300, 580));
    painter.drawLine( QPointF( 20, 300), QPointF( 580, 300 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 285, 35 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 315, 35 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 285 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 315 ));
    painter.setPen( QPen(Qt::black, 0 ) );

    for( int i = 0; i < 600; ++i )
    {
      if( i % 20 == 0 )
        {
          painter.drawLine( QPointF( i , 600 ), QPointF( i , 0 ) );
          painter.drawLine( QPointF( 600 , i ), QPointF( 0 , i ) );
        }
    }
    painter.setPen( QPen( Qt::red, 3 ));
    painter.drawLine ( p1 , p2 );
    painter.drawLine( p3, p4 );
    painter.end();
    lbl->resize(600, 600);
    lbl->show();
}


Код

#include<QtGui>
#include "LineDraw.h"

void buttons( LineDraw *);

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

    LineDraw *ln = new LineDraw;

    QLabel *lbl1 = new QLabel( "line one" );
    QLineEdit * l1x1 = new QLineEdit( "x1" );
    QLineEdit * l1y1 = new QLineEdit( "y1" );
    QLineEdit * l1x2 = new QLineEdit( "x2" );
    QLineEdit * l1y2 = new QLineEdit( "y2" );

    QLabel *lbl2 = new QLabel("Line two");
    QLineEdit * l2x1 = new QLineEdit( "x1" );
    QLineEdit * l2y1 = new QLineEdit( "y1" );
    QLineEdit * l2x2 = new QLineEdit( "x2" );
    QLineEdit * l2y2 = new QLineEdit( "y2" );

    QPushButton *phbOk = new QPushButton( "Draw" );

    QGridLayout *pgrdLayout = new QGridLayout;
    pgrdLayout->addWidget( lbl1, 0, 0, Qt::AlignCenter );
    pgrdLayout->addWidget( l1x1, 1, 0 );
    pgrdLayout->addWidget( l1y1, 2, 0 );
    pgrdLayout->addWidget( l1x2, 3, 0 );
    pgrdLayout->addWidget( l1y2, 4, 0 );

    pgrdLayout->addWidget( lbl2, 0, 1, Qt::AlignCenter );
    pgrdLayout->addWidget( l2x1, 1, 1 );
    pgrdLayout->addWidget( l2y1, 2, 1 );
    pgrdLayout->addWidget( l2x2, 3, 1 );
    pgrdLayout->addWidget( l2y2, 4, 1 );
    pgrdLayout->addWidget( phbOk, 5, 0, 1, 2 );
    ln->setLayout( pgrdLayout );
    ln->show();

    QObject::connect( phbOk, SIGNAL(clicked()),
                      ln, SLOT(slotDraw())
                      );

    return a.exec();
}


При подключении Q_OBJECT в заголовочном файле программы, выбивает ошибку:
undefined reference to `vtable for LineDraw', , если Q_OBJECT не подключать , то программа не видит слот slotDraw(), и так же если вызвать slotDraw() как обычную функцию из main(),  то она ничего не рисует, а просто выводит пустое окно 600 х 600, при этом в консоли пишет, что объект painter не активный.
Функция slotDraw() все делает правильно тогда когда ее переделать под  virtual void paintEvent( QPaintEvent *), но тогда она выводится в месте с виджетом кнопок, а мне нужно чтобы она выводиласть после ввода координат и нажатия кнопки phbOk.
Пожалуйста помогите решить проблемму. 



Это сообщение отредактировал(а) Ober - 11.2.2012, 14:11
PM MAIL   Вверх
ecspertiza
Дата 11.2.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



ты наверное с начало написал класс LineDraw, потом собрал проект, а потом добавил Q_OBJECT ? smile

очисти проект, прибей moc файлы, и заново собери проект, должно помочь


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Ober
Дата 11.2.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(ecspertiza @ 11.2.2012,  14:17)
ты наверное с начало написал класс LineDraw, потом собрал проект, а потом добавил Q_OBJECT ? smile

очисти проект, прибей moc файлы, и заново собери проект, должно помочь

Да, я сделал именно так. Я не совсем понял, что значит очистить проект а потом прибить мос фалы, можно по-подробнее немного ? )) 

Все ОК проблемма с Q_OBJECT и сигналом решена. Спасибо огромное. Но как теперь быть со слотом slotDraw(), он вызывается но кроме пустого окна ничего не рисует.

Это сообщение отредактировал(а) Ober - 11.2.2012, 14:45
PM MAIL   Вверх
Ober
Дата 11.2.2012, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Ну подскажите пожалуйста почему эта функция ничего не рисует ?
Код

void LineDraw::slotDraws()
{
    QImage *img = new QImage( QSize( 600, 600 ), QImage::Format_ARGB32_Premultiplied);
    QPainter painter( img );
    painter.setPen( QPen( Qt::black, 3 ));
    painter.drawLine( QPointF( 300, 20 ),QPointF( 300, 580));
    painter.drawLine( QPointF( 20, 300), QPointF( 580, 300 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 285, 35 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 315, 35 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 285 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 315 ));
    painter.setPen( QPen(Qt::black, 0 ) );

    for( int i = 0; i < 600; ++i )
    {
      if( i % 20 == 0 )
        {
          painter.drawLine( QPointF( i , 600 ), QPointF( i , 0 ) );
          painter.drawLine( QPointF( 600 , i ), QPointF( 0 , i ) );
        }
    }

PM MAIL   Вверх
math64
Дата 11.2.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Рисовать нужно в методе paintEvent(). А в слоте нужно вызвать repaint() или update()
PM   Вверх
Ober
Дата 11.2.2012, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(math64 @ 11.2.2012,  16:34)
Рисовать нужно в методе paintEvent(). А в слоте нужно вызвать repaint() или update()

Если я объявляю метод peintEvent(), то этот метод вызывается в одном окне с виджетом кнопок, то есть получается, что и кнопки и оси координат налазят друг на друга. Я не могу понять как сделать так, чтобы сначала вызывалось окно с кнопками, а потом при нажатии кнопки уже рисовались оси координат и отрезки в новом окне.

Получается когда в функции main() вызывается метод show() для вывода виджета кнопок, в месте с ним происходит событие paintEvent() и то, что еще не должно рисоваться рисуется одновременно с кнопками.


Это сообщение отредактировал(а) Ober - 11.2.2012, 16:51
PM MAIL   Вверх
math64
Дата 11.2.2012, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.

PM   Вверх
Ober
Дата 12.2.2012, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(math64 @ 11.2.2012,  17:17)
Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.

Почти сделал еще хотел спросить, а как вывести в основной виджет скажем числа в формате double, допустим просто нарисовать их в каком либо углу. 
Решено числа нарисованы =).

И в заключение еще один вопрос. Скажите пожалуйста как екзешники запускать ? Программа запускается только через QT creator, а через exe требует библиотеки.

Это сообщение отредактировал(а) Ober - 12.2.2012, 01:45
PM MAIL   Вверх
loneybibi
Дата 12.2.2012, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(Ober @ 11.2.2012,  23:30)
Цитата(math64 @ 11.2.2012,  17:17)
Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.

Почти сделал еще хотел спросить, а как вывести в основной виджет скажем числа в формате double, допустим просто нарисовать их в каком либо углу. 
Решено числа нарисованы =).

И в заключение еще один вопрос. Скажите пожалуйста как екзешники запускать ? Программа запускается только через QT creator, а через exe требует библиотеки.

Да для запуска приложения Qt с динамической линковкой нужно что бы рядом лежали библиотеки.
В каталоге ....\QtSDK\Desktop\Qt\4.7.4\mingw\bin есть все что тебе нужно. 
Берешь оттуда те библиотеки которые оно просит ! smile И кидаешь рядом с exe фалом.
Если я не ошибаюсь в теме для новичков это все есть.
Да и гугл тоже это знает. smile 


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
Ober
Дата 12.2.2012, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(loneybibi @ 12.2.2012,  02:04)
Цитата(Ober @ 11.2.2012,  23:30)
Цитата(math64 @ 11.2.2012,  17:17)
Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.

Почти сделал еще хотел спросить, а как вывести в основной виджет скажем числа в формате double, допустим просто нарисовать их в каком либо углу. 
Решено числа нарисованы =).

И в заключение еще один вопрос. Скажите пожалуйста как екзешники запускать ? Программа запускается только через QT creator, а через exe требует библиотеки.

Да для запуска приложения Qt с динамической линковкой нужно что бы рядом лежали библиотеки.
В каталоге ....\QtSDK\Desktop\Qt\4.7.4\mingw\bin есть все что тебе нужно. 
Берешь оттуда те библиотеки которые оно просит ! smile И кидаешь рядом с exe фалом.
Если я не ошибаюсь в теме для новичков это все есть.
Да и гугл тоже это знает. smile

Честно искал в яндексе, конкретного ничего не нашел. Спс
PM MAIL   Вверх
loneybibi
Дата 12.2.2012, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Цитата(Ober @ 12.2.2012,  01:49)
Цитата(loneybibi @ 12.2.2012,  02:04)
Цитата(Ober @ 11.2.2012,  23:30)
Цитата(math64 @ 11.2.2012,  17:17)
Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.

Почти сделал еще хотел спросить, а как вывести в основной виджет скажем числа в формате double, допустим просто нарисовать их в каком либо углу. 
Решено числа нарисованы =).

И в заключение еще один вопрос. Скажите пожалуйста как екзешники запускать ? Программа запускается только через QT creator, а через exe требует библиотеки.

Да для запуска приложения Qt с динамической линковкой нужно что бы рядом лежали библиотеки.
В каталоге ....\QtSDK\Desktop\Qt\4.7.4\mingw\bin есть все что тебе нужно. 
Берешь оттуда те библиотеки которые оно просит ! smile И кидаешь рядом с exe фалом.
Если я не ошибаюсь в теме для новичков это все есть.
Да и гугл тоже это знает. smile

Честно искал в яндексе, конкретного ничего не нашел. Спс

бывает ))) пометь тему тогда как решенную )


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
math64
Дата 12.2.2012, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Если запускать на своей машине - добавь в PATH путь до Qt-шного каталога bin (но только одной версии Qt)
А для распространения - добавляй в каталог нужные dll, если испльзуются драйвера (например, для работы с БД) - в каталог
pluging/sqldrivers/,  в программе указываешь путь до драйверов - QApplication::addLibraryPath() или файл создаёшь qt.conf
(в документации по Qt это всё есть)
PM   Вверх
Ober
Дата 12.2.2012, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Вот доделанная программа, может кому интересно посмотреть прокомментировать, прошу не судить строго это моя первая программа на qt и вообще под windows. Пользователь вводит координаты двух отрезков, программа рисует эти отрезки и находит точку их пересечения, правда она находит точку пересечения не отрезков а прямых проходящих через эти отрезки. Пока подсчитать координаты точки пересечения отрезков не получается.

Код

#ifndef LINEDRAW_H
#define LINEDRAW_H
#include <QWidget>

class LineDraw : public QWidget{
    Q_OBJECT

public:
  LineDraw( QWidget *pwgt = 0 );
  virtual void paintEvent( QPaintEvent * );
public slots:
    void slotClaculate();
    void valuep1x1( QString );
    void valuep1y1( QString );
    void valuep1x2( QString );
    void valuep1y2( QString );
    void valuep2x1( QString );
    void valuep2y1( QString );
    void valuep2x2( QString );
    void valuep2y2( QString );


private:
  QPointF p1;
  QPointF p2;
  QPointF p3;
  QPointF p4;
  double  a1x, b1y, c1, a2x, b2y, c2, resx, resy;


};
#endif // LINEDRAW_H


Код

#include "LineDraw.h"
#include<QtGui>

LineDraw::LineDraw( QWidget *pwgt ) :
    QWidget( pwgt ), p1( 300, 300 ), p2( 300, 300 ), p3( 300, 300 ), p4( 300, 300 ), resx( 0 ), resy(0)
{

}

void LineDraw::paintEvent( QPaintEvent * )
{

    QPainter painter( this );
    painter.setPen(QPen( Qt::black , 3 ) );
    painter.drawLine( QPointF( 300, 20 ),QPointF( 300, 580));
    painter.drawLine( QPointF( 20, 300), QPointF( 580, 300 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 285, 35 ));
    painter.drawLine( QPointF( 300, 20 ), QPointF( 315, 35 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 285 ));
    painter.drawLine( QPointF( 580, 300 ), QPointF( 565, 315 ));
    painter.setPen( QPen(Qt::black, 0 ) );
    for( int i = 0; i < 800; ++i )
    {
      if( i % 20 == 0 )
        {
          painter.drawLine( QPointF( i , 800 ), QPointF( i  , 0 ) );
          painter.drawLine( QPointF( 800 , i  ), QPointF( 0 ,  i ) );
        }
    }

    QRect rect( 400, 0, 200, 50 );
    QString str = "X = " + QString().setNum ( resx ) + " Y = " + QString().setNum( resy );
    painter.save();
    painter.setPen( QPen( Qt::black ));
    painter.setFont(QFont( "Times", 14, QFont::Bold ));
    painter.drawText( rect, Qt::AlignCenter,"Point of intersection is\n(" + str + ")" );
    painter.restore();

    painter.setRenderHint( QPainter::Antialiasing, true );
    painter.setPen( QPen( Qt::blue, 2 ));
    painter.drawLine ( p1 , p2 );
    painter.drawLine( p3, p4 );
    qDebug() <<"Y--" << (-(p1.y()-300))/20 << ", " << (-(p2.y()-300))/20 << ", " << (-(p3.y()-300))/20 << ", " << (-(p4.y()-300))/20 <<"\n" ;
     qDebug() << "X----" <<((p1.x()-300))/20 << ", " << ((p2.x()-300))/20 << ", " << ((p3.x()-300))/20 << ", " << ((p4.x()-300))/20 ;
}




void LineDraw::slotClaculate()
{
  a1x =  ( -( p1.y() - 300 ) ) / 20 - ( -( p2.y() - 300 ) ) / 20;
  b1y = ( p2.x() - p1.x() ) / 20;
  c1 = - ( ( a1x * ( ( p1.x() -300 ) / 20 )) + ( b1y * ((-( p1.y()  - 300 ) ) / 20 )) );

  a2x = ( -( p3.y() - 300 ) ) / 20 - ( -( p4.y() - 300 ) ) / 20;
  b2y = ( p4.x() - p3.x() ) / 20;
  c2 = - ( ( a2x * ( ( p3.x() -300 ) / 20 )) + ( b2y * ((-( p3.y()  - 300 ) ) / 20 )) );

  double determ = a1x * b2y - a2x  * b1y;

  if( determ != 0 )
  {
      double dx = ( -c1 * b2y ) - ( -c2 * b1y );
      double dy = ( -c1 * a2x ) - ( -c2 * a1x );

      resx = dx / determ;
      resy =  -( dy / determ );
      qDebug() << resx << ", " << resy;
  }
    this->repaint();
}

void LineDraw::valuep1x1( QString s )
{
  p1.rx() = 300 + ( s.toDouble() * 20 );
}

void LineDraw::valuep1y1( QString s )
{
  p1.ry() = 300 -( s.toDouble() * 20 );
}

void LineDraw::valuep1x2( QString s )
{
  p2.rx() = 300 + ( s.toDouble() * 20 );
}

void LineDraw::valuep1y2( QString s )
{
    p2.ry() = 300 -( s.toDouble( ) * 20);
}

void LineDraw::valuep2x1( QString s )
{
    p3.rx() = 300 + ( s.toDouble( ) * 20 );
}

void LineDraw::valuep2y1( QString s )
{
    p3.ry() = 300 -( s.toDouble( ) * 20 );
}

void LineDraw::valuep2x2( QString s )
{
    p4.rx() = 300 + ( s.toDouble( ) * 20 );
}

void LineDraw::valuep2y2( QString s )
{
    p4.ry() = 300 -( s.toDouble( ) * 20 );
}


Код

#include<QtGui>
#include "LineDraw.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    LineDraw *ln = new LineDraw;

    QLabel *lbl1 = new QLabel("Line one" );
    QLineEdit * l1x1 = new QLineEdit( "x1" );
    QLineEdit * l1y1 = new QLineEdit( "x2" );
    QLineEdit * l1x2 = new QLineEdit( "x3" );
    QLineEdit * l1y2 = new QLineEdit( "x4" );

    QLabel *lbl2 = new QLabel("Line two");
    QLineEdit * l2x1 = new QLineEdit( "x1" );
    QLineEdit * l2y1 = new QLineEdit( "y1" );
    QLineEdit * l2x2 = new QLineEdit( "x2" );
    QLineEdit * l2y2 = new QLineEdit( "y2" );

    QPushButton *phbOk = new QPushButton( "Draw" );

    QGridLayout *pgrdLayout = new QGridLayout;
    pgrdLayout->addWidget( lbl1, 0, 0, Qt::AlignBottom | Qt::AlignCenter );
    pgrdLayout->addWidget( l1x1, 1, 0 );
    pgrdLayout->addWidget( l1y1, 2, 0 );
    pgrdLayout->addWidget( l1x2, 3, 0 );
    pgrdLayout->addWidget( l1y2, 4, 0 );

    pgrdLayout->addWidget( lbl2, 0, 1, Qt::AlignBottom | Qt::AlignCenter );
    pgrdLayout->addWidget( l2x1, 1, 1 );
    pgrdLayout->addWidget( l2y1, 2, 1 );
    pgrdLayout->addWidget( l2x2, 3, 1 );
    pgrdLayout->addWidget( l2y2, 4, 1 );
    pgrdLayout->addWidget( phbOk, 5, 0, 1, 2 );
    ln->setLayout( pgrdLayout );
    ln->setFixedSize( 600, 700 );
    ln->pos();
    ln->show();


    QObject::connect( l1x1, SIGNAL(textChanged(QString)), ln, SLOT(valuep1x1( QString ) ) );
    QObject::connect( l1y1, SIGNAL(textChanged(QString)), ln, SLOT(valuep1y1( QString ) ) );
    QObject::connect( l1x2, SIGNAL(textChanged(QString)), ln, SLOT(valuep1x2( QString ) ) );
    QObject::connect( l1y2, SIGNAL(textChanged(QString)), ln, SLOT(valuep1y2( QString ) ) );
    QObject::connect( l2x1, SIGNAL(textChanged(QString)), ln, SLOT(valuep2x1( QString ) ) );
    QObject::connect( l2y1, SIGNAL(textChanged(QString)), ln, SLOT(valuep2y1( QString ) ) );
    QObject::connect( l2x2, SIGNAL(textChanged(QString)), ln, SLOT(valuep2x2( QString ) ) );
    QObject::connect( l2y2, SIGNAL(textChanged(QString)), ln, SLOT(valuep2y2( QString ) ) );

    QObject::connect( phbOk, SIGNAL(clicked()), ln, SLOT(slotClaculate() ));


    return a.exec();
}


PM MAIL   Вверх
math64
Дата 12.2.2012, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Для определения точки пересечения двух отрезков есть метод IntersectType QLineF::intersect ( const QLineF & line, QPointF * intersectionPoint ) const;
PM   Вверх
Ober
Дата 12.2.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(math64 @ 12.2.2012,  20:38)
Для определения точки пересечения двух отрезков есть метод IntersectType QLineF::intersect ( const QLineF & line, QPointF * intersectionPoint ) const;

Все супер, с помощью функции все получилось. Тема себя исчерпала, всем спасибо за помощь.
Хотел еще спросить, нет ли в сети хорошего и удобного справочника по QT библиотеке на Русском?

Это сообщение отредактировал(а) Ober - 12.2.2012, 22:01
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.