Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 13:51   #1
_KUL
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 96
По умолчанию полный 0 в Qt и чайник в С++

Всю свою сознательную молодость работал с Objective Pascal в среде Delphi, решил познакомиться с С++, базовый курс прочитал, захотел попробовать, выбрал среду Qt. Хочу сделать простое - взаимодействие с элементами формы. Не могу понять, объясните пожалуйста на пальцах
Например хочу при нажатии на кнопку делать что-то, например лабелу присвоить текст.

Код:
#include <QtGui/QApplication>
#include "widget.h"
#include "qpushbutton.h"
#include "QHBoxLayout"
#include "QLabel.h"


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

    QHBoxLayout *layout = new QHBoxLayout;

    QPushButton *b = new QPushButton;
    b->setText("asdasd");

    QLabel *l = new QLabel;

    layout->addWidget(b);
    layout->addWidget(l);

    QObject::connect(b,SIGNAL(clicked()),l,SLOT(setText("бум")));

    w.setLayout(layout);
    w.show();

    return a.exec();
}
В Qt всё делается через сигналы и слоты, т.е. сигнал клик и слот лабела сеттекст ?!

QObject::connect(b,SIGNAL(clicked() ),l,SLOT(setText("бум")));
??

Но не работает ...
И сразу самому себе возникает вопрос "а если 100 строк кода выполнить нужно при нажатии кнопки, все в коннект писать?", а понять не могу . Или нужно создать новую функцию для слота кнопки, при нажатии на которую происходят действия?
Подскажите, как мне при нажатии кнопки сделать кучу действий, одно из которых, это присвоить лабелу текст? Как это правильно делается?

Последний раз редактировалось ACE Valery; 13.05.2012 в 15:43.
_KUL вне форума Ответить с цитированием
Старый 13.05.2012, 23:05   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

MyWidget
Код:
#ifndef MYWIDGET
#define MYWIDGET

#include <QWidget>
#include <QtGui>

class MyWidget : public QWidget
{
    Q_OBJECT
    QLabel * label;
    QPushButton * button;
    QHBoxLayout * layout;
public:
    explicit MyWidget(QWidget *parent = 0);
    
signals:
    
public slots:
    void aSignal();
};

#endif // MYWIDGET
MyWidget.cpp
Код:
#include "MyWidget"

#include <QtGui>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    this->label = new QLabel("I am label");
    this->layout = new QHBoxLayout;
    this->button = new QPushButton("Push me");
    this->setLayout(this->layout);
    this->layout->addWidget(this->label);
    this->layout->addWidget(this->button);
    QObject::connect(this->button, SIGNAL(clicked()), this, SLOT(aSignal()));
}

void MyWidget::aSignal()
{
    this->label->setText(QString("Don't push more"));
}
Main.cpp
Код:
#include <QtGui>
#include <MyWidget>

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);
    MyWidget wgt;
    wgt.show();
    return app.exec();
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 14.05.2012, 17:01   #3
_KUL
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 96
По умолчанию

Точно! Ведь можно наследовать класс и добавить своих переменных/функций! Спасибо!
_KUL вне форума Ответить с цитированием
Старый 16.05.2012, 10:16   #4
_KUL
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 96
По умолчанию тип char

Объясните как работать с безразмерными строками через тип чар

PHP код:
#include <iostream>

using namespace std;

int main()

{
    
char str[10];
    
cin >> str;
    
cout << "Stroka str[10] " << str << "\n";

    
char p;
    
cin >> p;
    
cout << "Stroka p " << << "\n";

    
cout << endl;
    return 
0;

В первом случае мы создаём в памяти место под 10 ячеек для букв, вводим и выводим их.
Во втором случае мы создаём чар указатель и ему присваиваем безграничное количество символов?! Как для этого выделяется память? И почему в конце программа завершается некорректно? (компилируется без ошибок)
Например если заранее не известно, сколько пользователь введёт символов, как корректно выделить переменную?
_KUL вне форума Ответить с цитированием
Старый 17.05.2012, 08:22   #5
kkvt
Новичок
Джуниор
 
Регистрация: 17.05.2012
Сообщений: 1
По умолчанию

Могу в качестве материала для новичков порекомендовать вот эти видеолекции. Отзывы вроде хорошие и не так много смотреть -- за 3 дня можно все основы выучить.
kkvt вне форума Ответить с цитированием
Старый 17.05.2012, 21:08   #6
_KUL
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 96
По умолчанию

спасибо. скачал все видеоуроки ещё наверно месяц назад, но там есть правило "прежде чем изучать кьют, нужно понимать с++", а вот как раз с пониманием этих указателей как раз и стопор. ну когда мы просто делаем переменная - указатель - вывести значение по указателю, всё ясно, но когда указатель на тип, с последующими манипуляциями, тут туго ...
Например
int * i;
*i = 10;
т.е. создаётся указатель и ему присваивается значение?! куда оно уходит? ведь ни с какой из переменных не связан указатель!!!
_KUL вне форума Ответить с цитированием
Старый 18.05.2012, 09:57   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
т.е. создаётся указатель и ему присваивается значение?!
Не ему.. операция разыменования ведь, значение пишется по адресу хранящемуся в указетеле.

Код:
int * i;
 *i = 10;
Если это локальный код, то скорее всего будет еррор.

Цитата:
ведь ни с какой из переменных не связан указатель!!!
Он связывается с ячейками в памяти.
p51x вне форума Ответить с цитированием
Старый 18.05.2012, 10:23   #8
_KUL
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 96
По умолчанию

получается, *p указывает на ячейку памяти равную размеру типа int ?!
Тогда почему тут
int * p;
p[1] = 1;
p[2] = 20;
p[3] = 50;
cout << p[1] << p[2] << p[3];
он динамически расширяется??? Ведь я new для типа не использую и из кучи не беру место!!!
_KUL вне форума Ответить с цитированием
Старый 11.06.2012, 10:31   #9
breate
Пользователь
 
Аватар для breate
 
Регистрация: 30.12.2008
Сообщений: 78
По умолчанию

Исполняемый код, при условии того, что он выполняется, это чистая случайность. *p не указывает на ячейку типа int, int * p говорит о том, что при индексации указателя, будет смещение на sizeof(int) байт.
Данный метод записывает числа не понятно куда и может испортить данные другого приложения.
Моя работа - Создание сайтов
breate вне форума Ответить с цитированием
Старый 14.06.2012, 10:40   #10
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

сам пару недель назад перебрался с делфей на кьют, тоже поначалу все было очень не привычно и не понятно, но после того как написал пару программ все нормализовалось)
так что лучше изучайте сразу qt,а по необходимости будите узнавать с++
spydark91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чайник. WizarD.89 Общие вопросы C/C++ 2 25.01.2012 19:36
Я чайник nasirus Паскаль, Turbo Pascal, PascalABC.NET 1 02.03.2011 17:41
бд, делфи и чайник m0dE^ БД в Delphi 2 11.08.2010 15:03
Роботостроение. (Чайник) Web-Gangsta Свободное общение 3 07.02.2010 19:11