crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> вопрос по сигналам и слотам
deex
  опции профиля:
сообщение 2.9.2009, 18:33
Сообщение #1


Студент
*

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

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




Репутация:   0  


пытаюсь связать интерфейс Qt с функциями, через сигналы и слоты

вот что на данный момент не получается:

можно создать виджет руками

QLCDNumber *plcd = new QLCDNumber;

и потом привязать сигналы с него к слоту другого виджета

QObject::connect(pspb, SIGNAL(valueChanged(int)), plcd, SLOT(display(int)));
--------

с этим всё понятно, мы передаём в connect() указатель на виджет plcd

но в Eclipse можно рисовать интерфейс в редакторе.
И тогда появляется два файла, к примеру test.h, test.ui

допустим создал я на поверхности test.ui кнопку и имя у неё testButton

в коде можно лишь создать объект

test obj;
и показать его
obj.show();

как обратиться к созданной кнопке?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 2.9.2009, 18:39
Сообщение #2


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

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

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




Репутация:   44  


test obj;
connect( obj.testButton, SIGNAL( clicked() ), recv, SLOT( buttonClicked() ) );
obj.show();


А можно унаследоваться от test:
class Test : public test
{
public:
    Test(...)
    {
        connect( testButton, SIGNAL( clicked() ), SLOT( buttonClicked() ) );
        ...
    }

protected slots:
    void    buttonClicked()
    {
    }
};


В примерах все есть!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deex
  опции профиля:
сообщение 2.9.2009, 18:50
Сообщение #3


Студент
*

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

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




Репутация:   0  


спасибо
в том то и дело что строка, где упоминается test.pushButton - создаёт ошибку

main.cpp:31: error: 'class test' has no member named 'pushButton'

а в случае с классом

main.cpp:11: error: `pushButton' was not declared in this scope

и непонятно что вообще с этим классом дальше делать, просто создать его объект?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.9.2009, 19:12
Сообщение #4


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

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(deex @ 2.9.2009, 19:33) *
допустим создал я на поверхности test.ui кнопку и имя у неё testButton
Цитата(deex @ 2.9.2009, 19:33) *
как обратиться к созданной кнопке?

ui->testButton
или
ui.testButton

в зависимости от того как проектируется приложение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deex
  опции профиля:
сообщение 3.9.2009, 6:55
Сообщение #5


Студент
*

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

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




Репутация:   0  


получилось.

но ui в классе test был объявлен Эклипсом как приват
сделал его паблик, смог обратиться так:

QObject::connect(test.ui.pushButton, SIGNAL(clicked(int)), &app, SLOT(quit()));

вопрос - почему приват? и правильно ли я делаю, обращаясь так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.9.2009, 7:16
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


deex,
вишь все беды от эклипса.:)
если начинаешь с таких азов начинай в обычном редакторе лишь бы синтаксис подсвечивал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
deex
  опции профиля:
сообщение 3.9.2009, 7:44
Сообщение #7


Студент
*

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

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




Репутация:   0  


кто ж мог подумать что связка Eclipse + QT мешает, а не помогает
обычный С++ я пишу в Эклипсе и мне он очень облегчает жизнь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
reich
  опции профиля:
сообщение 3.9.2009, 8:51
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 966

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




Репутация:   0  


Цитата(deex @ 3.9.2009, 7:44) *
кто ж мог подумать что связка Eclipse + QT мешает, а не помогает
обычный С++ я пишу в Эклипсе и мне он очень облегчает жизнь

Бред полнейший. Прочитайте хотябы пол книги по Qt и Вы поймете, как рисовать GUI

Вот простой пример, как этим пользоваться:
//main.cpp
#include <QtGui/QApplication>

#include "widget.h"



int main( int argc, char *argv[] ){
    QApplication app( argc, argv );
    Widget wdg;
    wdg.setInstance( app.instance() );
    wdg.setVisible( true );
    return app.exec();
}

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "ui_widget.h"

class QCoreApplication;

class Widget : public QWidget{

    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

public:
    void setInstance( QCoreApplication *__app );

private:
    Ui::WidgetClass _ui;

};

#endif // WIDGET_H


//widget.cpp
#include "widget.h"

#include <QtCore/QCoreApplication>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    _ui.setupUi(this);
}

Widget::~Widget()
{

}

void Widget::setInstance(QCoreApplication *__app){
    connect( _ui.pushButton, SIGNAL( clicked() ), __app, SLOT( quit() ) );
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 3.9.2009, 9:30
Сообщение #9


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

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

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




Репутация:   44  


Цитата(reich @ 3.9.2009, 9:51) *
Бред полнейший. Прочитайте хотябы пол книги по Qt и Вы поймете, как рисовать GUI

:) ;)

Цитата(reich @ 3.9.2009, 9:51) *
Вот простой пример, как этим пользоваться:
//main.cpp
int main( int argc, char *argv[] ){
    ...
    wdg.setInstance( app.instance() );
    ...
}

void Widget::setInstance(QCoreApplication *__app){
    connect( _ui.pushButton, SIGNAL( clicked() ), __app, SLOT( quit() ) );
}

Для чего такие сложные телодвижения для получения указателя на QApplication?
Почитай про:
QCoreApplication * QCoreApplication::instance () [static]
и макрос qApp.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
reich
  опции профиля:
сообщение 3.9.2009, 11:01
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 31.7.2009
Пользователь №: 966

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




Репутация:   0  


BRE, я привык так делать, потому, что есть иногда другие нужды в использовании QCoreApplication
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.9.2019, 5:31