LINUX.ORG.RU

slot QT


0

0

Недавно начал изучать QT... Но так как не хватает мне C Builder'a обратил внимание на QT3.

Тема такая: создал c++ project, добавил main form, добавил c++ main module...

Форма у меня называется first_f.

В файле first_f.h описал класс и запихал в него несколько функций(чтоб связать их с сигналом click(), например).

Через интерфейс QT3 пытаюсь связать сигнал с методом класса, но не получается. В качестве Receiver нельзя выбрать объект который я создал, и вообще там только компоненты формы.

Если не влом, объясните какая там технология...

anonymous

Чё то не понятно. Если хочешь изучить QT - усиленно читай QT assistant и примеры QT (они должны поставлятся вместе с QT). Например, чтобы сделать и откомпилить проект из одного исходника (простенькая форма), то сделай main.cpp, опиши в нём класс по всем правилам, потом

#qmake -project
#qmake
#make

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

Я ж говорю. QT почитал немного, qmake и прочее, это все мы знаем.

Класс описанный в first_f.h невидим.

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

Вот файл main.cpp:

#include <qapplication.h>
#include "first_f.h"
#include "func.cpp"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    first_f w;
   
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    a.connect( &w.mount_b, SIGNAL( clicked() ), &w, SLOT( mount_bClick() ) );    
    
    //void first_f::mount_bClick();
    
    return a.exec();
}


Вот файл first_f.h:

#ifndef FIRST_F_H
#define FIRST_F_H

#include <qvariant.h>
#include <qmainwindow.h>

class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QAction;
class QActionGroup;
class QToolBar;
class QPopupMenu;
class QButtonGroup;
class QPushButton;
class QIconView;
class QIconViewItem;

class first_f : public QMainWindow
{
    Q_OBJECT

public:
    first_f( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
    ~first_f();

    QButtonGroup* ActBut;
    QPushButton* umount_b;
    QPushButton* open_b;
    QPushButton* mount_b;
    QIconView* dev_l;
    QMenuBar *menu;
    QPopupMenu *PopupMenuEditor;
    QPopupMenu *unnamed1;
    QPopupMenu *unnamed2;
    QAction* menu_open;
    QAction* menu_exit;
    QAction* menu_Pref;
    QAction* menu_help;
    QAction* menu_about;

protected:

protected slots:
    virtual void languageChange();
    void mount_bClick();
    void umount_bClick();
    void open_bClick();

};

void first_f::mount_bClick(){

}
void first_f::umount_bClick(){

}
void first_f::open_bClick(){

}


#endif // FIRST_F_H
-------------------------------------------------------------------При При компиляции ошибка в main.cpp.
Как надо связывать? По-моему у меня правильно написано.

anonymous
()
Ответ на: комментарий от hbee

Это неважно. Если не прямо вызывать, то свяжется. Приямой вызов там закомментирован. А что за ошибки?

Запость

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

Такие вот ошибки:

main.cpp: In function `int main(int, char**)':
main.cpp:12: error: no matching function for call to `QApplication::connect(QPushButton**, const char[11], first_f*, const char[16])'
/usr/lib/qt3/include/qobject.h:116: error: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*)
/usr/lib/qt3/include/qobject.h:227: error:                 bool QObject::connect(const QObject*, const char*, const char*) const
make: *** [.obj/main.o] Ошибка 1


Если закомментировать второй connect, тогда все ОК.

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

Все! Заработало!

Хоть я и не понял чем был плох мой код... Я добавил слоты через QT-Designer и все заработало!

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

нутк, а говоришь читал - a.connect( &w.mount_b, ^^^^^^^^^^^ двойной указатель вместо одиночного =))

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

нутк, а говоришь читал -

a.connect( &w.mount_b,
^^^^^^^^^^^

двойной указатель вместо одиночного =))

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