Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] создание класса 
:(
    Опции темы
ecspertiza
Дата 27.11.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вообщем хочу создать вот такой класс

http://pic.ipicture.ru/uploads/081127/PUUSs4SSwG.jpg

из базы на него грузятся картинки, по клику на левую или правую кнопку, происхоби переход по картинкам, кнопки я думаю будут наследованны от QLabel, т.к я их нарисую и засуну их в QLabel, пока проблема такая, немогу повесить на класс созданный от QLabel сигнал clicked(), делаю так

line.cpp
Код

#include "line.h"

Line::Line(QWidget *parent)
    : QWidget(parent)
{
    resize(600,100);
    LeftButton *left = new LeftButton(this);
    left->setText("qwerty");
    connect(left,SIGNAL(clicked()),this,SLOT(mess()));
}

void Line::mess()
{
    QMessageBox::information(this,tr("Us"),tr("Good"));
}

LeftButton::LeftButton(Line *parent)
    : QLabel(parent)
{
    setGeometry(0,0,50,100);        
}
 

line.h
Код

#ifndef __LINE_H__
#define __LINE_H__

#include <QWidget>
#include <QLabel>
#include <QMessageBox>

class Line : public QWidget
{
    Q_OBJECT

public :
    Line(QWidget *parent = 0);    
    
public slots:
    void mess();    
    
};

class LeftButton : public QLabel
{
    Q_OBJECT
    
public:
    LeftButton(Line *parent = 0);    
    
signals:
    void clicked();    
    
};

#endif 


как сделаю сей класс обязуюсь выложить исходника smile 


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

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


Опытный
**


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

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



ну дык чтоб сигнал работал нужно его емитировать
например в класс LeftButton  добавляеш 
Код

private:
  void mouseReleaseEvent(QMouseEvent *);

в cpp файле
Код

void LeftButton::mouseReleaseEvent(QMouseEvent *)
{
    emit clicked();
}





--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
SABROG
Дата 27.11.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Мне кажется, что тут несколько иначе надо сделать. Замучаешься кликать по стрелочкам, чтобы прокрутить картинки. Надо как-то эмитить сигнал периодически пока зажата клавиша мышки. Еще было бы хорошо повесить сигналы на клавиши Left/Right, чтобы можно было крутить полоску туда сюда с помощью клавы. Home/End - начало, конец списка. Tab - прокрутить до следующего элемента и сделать его активным. И совсем отлично было бы повесить mouse wheel (колесико мышки) на прокрутку. А для прокрутки использовать QWidget::scroll(), чтобы не по-элементно.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ecspertiza
Дата 28.11.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Продолжаю создовати ентот класс.

Значитцо так создаю виджет на нём левую, и правую кнопку, между ними центральный Виджет, на катором собственно и будут картинки, только вот количество картинок динамическое, пока описание класса картинки выгледит так

Код

class Image : public QLabel
{
    Q_OBJECT
public:
    Image(QWidget *parent = 0,int x = 0, int y = 0);
};


вопрос в том как создать денамический массив класса Image?


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

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


Опытный
**


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

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



QList

Добавлено @ 13:48
типа такого
Код

QList<Image*> *lstImage = new QList<Image*>;
....
Image *img = new Image(this);
..
lstImage->append(img);


Это сообщение отредактировал(а) Elfebet - 28.11.2008, 13:49


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
mes
Дата 28.11.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Elfebet @  28.11.2008,  13:46 Найти цитируемый пост)
QList<Image*> lstImage = new QList<Image*>;

если с использованием new, то QList<Image*> * lstImage = new QList<Image*>;


Это сообщение отредактировал(а) mes - 28.11.2008, 13:53


--------------------
PM MAIL WWW   Вверх
ecspertiza
  Дата 28.11.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если я правильно понял то вот так
Код

QList<Image *> image;

for (int i = 0; i <10; i++)
{
     image[i] = new Image(....);
} 


что то мне кажется что немногу подругому.


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

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


Опытный
**


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

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



Код

QList<Image *> image;
for (int i = 0; i <10; i++)
{
     image.append(  new Image(....)  );
} 


можно еще Векторы юзать
Код

QVector<Image*> image;
for (int i = 0; i <10; i++)
{
     image.append(  new Image(....)  );
} 

или
Код

QVector<Image*> image(10, 0);
Image **img = image.data();
for (int i = 0; i <image.size(); i++)
{
     img[i] = new Image(....);
} 


кароче вариантов много, лучше юзай QList

Это сообщение отредактировал(а) Elfebet - 28.11.2008, 14:03


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ecspertiza
Дата 28.11.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ЗАРАБОТАЛО!!!! Elfebet спасиб, буду дальше ковырять.


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

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


Опытный
**


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

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



Цитата(Elfebet @ 27.11.2008,  12:24)
Код

private:
  void mouseReleaseEvent(QMouseEvent *);

в cpp файле
Код

void LeftButton::mouseReleaseEvent(QMouseEvent *)
{
    emit clicked();
}


Почти готово, а вот про ету тему где можно почитать? Хочу повесить события на скрол, и если кнопка зажата.


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

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


Опытный
**


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

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



Код

Почти готово, а вот про ету тему где можно почитать?

в документации "Signals and Slots"
Цитата

Хочу повесить события на скрол, и если кнопка зажата. 

нифига не понял, какое событие? у тя что при прокручивании виджет НЕ прокручиваеться?

подружись с ассистентом, там все написано - что зачем и как, лучше документации тебе никто не ответит


Это сообщение отредактировал(а) Elfebet - 28.11.2008, 16:18


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ecspertiza
Дата 1.12.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вообщем вот получилась вот такая беда(в атаче), там есть процедура addImage, вот после её использования я думаю надо какойто update проводить, так как картинки создаются только при создании Виджета. Ну и вообще мож кто подскажет что подправить нужно, а то я в етом деле недавно.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  src.rar 1,02 Kb


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

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


Hacker
****


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

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



А ты случаем не класс для этого эвента кодишь ? http://trolltech.com/developer/pimp-my-wid...veloper-contest

http://trolltech.com/images/developerzone/list.PNG

А то глядишь сигвей выйграешь ;)


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ecspertiza
Дата 8.12.2008, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще нет я для проги своей smile  но теперь можно будет попробывать выложить smile


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

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


Опытный
**


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

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



Ну вот така тема вышла, треба объективная критикаsmile



Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  LineWidget.zip 788,39 Kb


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

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


Опытный
**


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

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



SABROG, если хошь можешь выложить код у тролей, а то у мя видео нету и с английским не оченьsmile


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

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


Hacker
****


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

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



Код

C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lqjpeg


Не могу собрать. Походу у тебя Qt статически собран и прога под статику заточена.

Код

release/main.o(.text+0x159):main.cpp: undefined reference to `qt_plugin_instance
_qjpeg()'


--
В общем пришлось указать полный путь к plugins\imageformats в .pro файле и закомментить эти строки, чтобы собрать с динамическим плагином:

Код

/*QT_BEGIN_NAMESPACE
Q_IMPORT_PLUGIN(qjpeg)
QT_END_NAMESPACE*/


Т.е. надо доработать исходники и .pro файл через всякие #ifdef, чтобы билдинг мог быть с разными версиями Qt (static и shared).

Кнопочки скроллинга смотрятся немного убого из-за несовпадения фона формы. Имхо надо добавить фреймы для картинок, фокусинг, увеличить скорость прокрутки, автоподгонку размера контрола по максимальной высоте одной из картинок и сделать mouse wheel и неплохо было бы добавить Mouse Drag, т.е. когда ты не просто щелкнул по картинке, а начал мышу двигать, чтобы полоска вместе с мышой скроллилась (доп.фича - автопродолжение движения с угасанием в зависимости от скорости рывка мышки). Про клавиатурные клавишы тоже не забыть: left,right,home,end,pgup,pgdown. Подписи к картинкам снизу/сверху/на картинке. Всплывающие ToolTips с подписями или комментариями. Добавить поддержку всплывающих контекстных меню по правой кнопке мышки. Режимы отображения: горизонтальный, вертикальный (плюс спец. режим прокрутки построчно).
Добавить поддержку больших форматов картинок. Флаги, чтобы можно было перетасовывать картинки, Drag&Drop. Свойство-флаг для всплывающего окна предпросмотра при долгом удержании мышки на картинке (альтернативный вариант как Rocket Deck или панель MacOS'a). Удаление картинок через клавишу Delete. Вставка через Insert. Плавающий компонент как ToolBar (т.е. автовыбор горизонтальный/вертикальный стиль). Вдогонку сделать его в качестве плагина для QDesigner'a. Сами кнопочки лучше динамически рисовать, если не используются стили. Доработать контрол для всех возможных стилей Qt, чтобы смотрелось гармонично. При достижении конца списка - кнопку прокрутки делать неактивной дотех пор, пока прокрутка не пойдет обратно. Или еще круче при достижении конца списка - на кнопке "Вправо"/"Влево" меняется стрелка на "Лево"/"Вправо", при первом клике - прокрутка идет в обратном направлении, при отпускании - значении кнопки и картинка возвращяется в исходное состояние (типа оптимизация, не надо мышиный курсор уводить). И доп режим - циклическая прокрутка (по кругу).

Тут может быть утечка памяти. Может быть сделать метод типа clear() и еще метод типа removeImage() ?

Код

    if (image.count() <= 0)
        image.append(new Image(centralWidget,5,10) );
    else
        image.append(new Image(centralWidget,image[image.count()-1]->x()+image[image.count()-1]->width()+10,10) ); 


Видео положил на Ютуб: http://www.youtube.com/watch?v=JnvuCW_yQYs



В целом неплохо получилось.

Это сообщение отредактировал(а) SABROG - 8.12.2008, 14:00


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ecspertiza
Дата 8.12.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



За видео на Yourtube спасибо, как думаешь что в Describe Your Entry написать, у мя с детства с описанием проблема.


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

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


Hacker
****


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

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



Цитата(ecspertiza @ 8.12.2008,  13:52)
За видео на Yourtube спасибо, как думаешь что в Describe Your Entry написать, у мя с детства с описанием проблема.

Напиши что-нибудь типа:

Цитата

This is custom widget for sliding pictures with basic features.


Правда я сам не силен в английском, но думаю тебя вполне поймут.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Elfebet
Дата 8.12.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



посмотрел на ютубе - неплохо smile, еще б было не плохо регулировать скорость листания картинок когда мышка зажата
типа сделать такого метода
Код

void setSpeedAutoScroll(int msec);
int speedAutoScroll();




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

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

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


 




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


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

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