[Решено] QT (основы)

Модератор: Модераторы разделов

Аватара пользователя
Lostboy
Сообщения: 33
ОС: openSUSE/Mandriva

[Решено] QT (основы)

Сообщение Lostboy »

Нужно написать интерфейс, решил работать с QT так как по ней много инфы да и стоит она уже вместе с KDevelop на моей Suse (KDE)
Так вот, не могу найти ни одного подробного описания для начинающего, как с этим зверем работать. Всю голову уже поломал (после MSVS тяжело переходить) мне для начала хотя бы просто создать форму, повесить на нее 1 Эдит и к Баттон и повесить на них события. Кто может помогите, желательно с пояснениями, т.к. просто создать форму с элементами проблем нет, сохранить ее тоже (с раcширением .ui) Но вот как осуществить привязку..
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено] QT (основы)

Сообщение deadhead »

[x] close
Спасибо сказали:
Аватара пользователя
Lostboy
Сообщения: 33
ОС: openSUSE/Mandriva

Re: [Решено] QT (основы)

Сообщение Lostboy »

Это конечно хорошая ссылка и я там был, НО там очень много информации и она охватывает много разделов, мне нужно конкретно как связать объект на форме с его описанием, т.е. как повесить событие (на форму/на кнопку) вот и все, просто нет времени сейчас углубленно изучать и вычитать все прелести QT... Кто-то может помочь?
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено] QT (основы)

Сообщение deadhead »

[x] close
Спасибо сказали:
Аватара пользователя
Tetsuzin
Сообщения: 136
ОС: Vista, Ubuntu

Re: [Решено] QT (основы)

Сообщение Tetsuzin »

Задавите земноводное, и купите книжку. Бумажную.

Например таких авторов:
1. Бланшет Ж. Саммерфилд М.
2. Шлее М.
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: [Решено] QT (основы)

Сообщение agentprog »

Tetsuzin писал(а):
21.10.2009 12:39
Бланшет Ж. Саммерфилд М.

+1
а после этой книжки довольно удобно
http://doc.trolltech.com/4.5/index.html
No problems - just solutions!
Спасибо сказали:
Аватара пользователя
Lostboy
Сообщения: 33
ОС: openSUSE/Mandriva

Re: [Решено] QT (основы)

Сообщение Lostboy »

У меня такой вопрос возможно ли соединить воедино код который был написан на С под консоль вместе с QT?
Я создал форму, повесил кнопку, и хочу чтоб по нажатию на нее выполнялся код. Вот к примеру такой код клиента:

Код: Выделить всё

char message[] = "Hello there!\n";
char buf[sizeof(message)];
char host[] = "192.168.78.133";

    int sock;
    struct sockaddr_in addr;

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(3425); // или любой другой порт...
    inet_aton(host, &addr.sin_addr.s_addr);

    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("connect");
        exit(2);
    }

    send(sock, message, sizeof(message), 0);
    close(sock);

Но при компиляции я получаю много плохих слов.
Есть какое-то средство решения данной проблемы или необходимо все переделать под QT используя его классы и т.д..?
з.ы.Может надо как-то хитро подключить хидеры или еще что-то? Проект делается С++, потому что в С-проекте нет раздела QT и ошибки в основном сыпятся на функции: connect, send, close.
Однако при этом подключены:

Код: Выделить всё

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

и не только..
Вот ошибки:

Код: Выделить всё

компиляция sender.cpp (g++)
sender.cpp: In member function 'void Sender::send1()':
sender.cpp:71: error: no matching function for call to 'Sender::connect(int&, sockaddr*, unsigned int)'
/usr/include/QtCore/qobject.h:197: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
/usr/include/QtCore/qobject.h:302: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
sender.cpp:81: error: no matching function for call to 'Sender::close(int&)'
/usr/include/QtGui/qwidget.h:476: note: candidates are: bool QWidget::close()
gmake[1]: *** [sender.o] Error 1
gmake: *** [sub-src-make_default] Error 2
*** Завершено с кодом: 2 ***

Такое ощущение, что функции берутся не те которые мне нужны, а те которые есть в Qt с такими же именами...
Спасибо сказали:
Аватара пользователя
Lostboy
Сообщения: 33
ОС: openSUSE/Mandriva

Re: [Решено] QT (основы)

Сообщение Lostboy »

Проблема решена.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [Решено] QT (основы)

Сообщение deadhead »

Lostboy писал(а):
22.10.2009 23:07
Проблема решена.

Ну так опишите решение, так сказать, для потомков... вдруг у кого-то еще появится схожий вопрос :-)

P.S. Если не сложно, то подправте заголовок темы добавиви [Решено] ;-)
[x] close
Спасибо сказали:
Аватара пользователя
iljaCPP
Сообщения: 48
ОС: Slackware

Re: [Решено] QT (основы)

Сообщение iljaCPP »

Функция connect() конфликтует с QObject::connect, т.к. потомок QObject является текущей областью видимости.
Надо вызывать ::connect()
Спасибо сказали:
Аватара пользователя
Lostboy
Сообщения: 33
ОС: openSUSE/Mandriva

Re: [Решено] QT (основы)

Сообщение Lostboy »

Да, iljaCPP, прав и не только функция connect(), но и close() (в полном варианте программы еще некоторые) поэтому помимо того что нужно подключить их хидеры, необходимо их вызывать следующим образом ::connect() , так как в текущей области видимости они либо не числятся либо принимают совсем другие параметры, а так мы вызываем их из глобального пространства и все работает.
Спасибо сказали:
Leviafant
Сообщения: 47
ОС: Мандрива 2010

Re: [Решено] QT (основы)

Сообщение Leviafant »

Помогите и мне

Код: Выделить всё

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

QApplication app(argc, argv);

int fe_fd;

check_frontend(fe_fd);
QLabel lbl("test", 0);

app.setActiveWindow(&lbl);
lbl.show();

return app.exec();
}

Как вместо "test" вывести результат функции check_frontend(fe_fd)? А то результат выводится только в консоль, а мне надо что бы он был виден в окне
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: [Решено] QT (основы)

Сообщение RasenHerz »

смотря что возвращает check_frontend.
Спасибо сказали:
Leviafant
Сообщения: 47
ОС: Мандрива 2010

Re: [Решено] QT (основы)

Сообщение Leviafant »

вот сама функция

Код: Выделить всё

static
int check_frontend (int fe_fd)
{
fe_status_t status;
uint16_t snr, signal;
uint32_t ber, uncorrected_blocks;

ioctl(fe_fd, FE_READ_STATUS, &status);
ioctl(fe_fd, FE_READ_SIGNAL_STRENGTH, &signal);
ioctl(fe_fd, FE_READ_SNR, &snr);
ioctl(fe_fd, FE_READ_BER, &ber);
ioctl(fe_fd, FE_READ_UNCORRECTED_BLOCKS, &uncorrected_blocks);


printf("status %02d | signal %04d | snr %04d |",
status, signal*100/65535, snr*100/65535);


if (status & FE_HAS_LOCK)
printf("FE_HAS_LOCK");

printf("\n");

return 0;
}
Спасибо сказали: