Russian Qt Forum

Qt => Общие вопросы => Тема начата: smartchecker от Май 19, 2012, 13:30



Название: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 19, 2012, 13:30
Мне нужно на форму диалога поместить некую сущность в виде белого прямоугольника, при клике на котором будет открываться QFileDialog.
После выбора картинки в FileDialog'е эта картинка должна рисоваться вместо белого прямоугольника.
Какой элемент поместить на форму?


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 19, 2012, 13:40
Мне нужно на форму диалога поместить некую сущность в виде белого прямоугольника, при клике на котором будет открываться QFileDialog.
После выбора картинки в FileDialog'е эта картинка должна рисоваться вместо белого прямоугольника.
Какой элемент поместить на форму?
QLabel


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 19, 2012, 13:50
У QLabel нет click().


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 19, 2012, 14:06
У QLabel нет click().
Зато есть "virtual void mouseReleaseEvent(QMouseEvent *ev)".


Название: Re: Картинка на форме диалога. Как?
Отправлено: trot от Май 19, 2012, 14:15
Обычную кнопку и стилизовать её.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 19, 2012, 14:23
Обычную кнопку и стилизовать её.
Например как?
Обычную кнопку можно сделать flat?


Название: Re: Картинка на форме диалога. Как?
Отправлено: iroln от Май 19, 2012, 16:07
Не надо никаких кнопок стилизованных, используй QLabel и не парь себе мозг. Для отлова события клика мишкой можно использовать EventFilter либо как тут сказали, унаследовать класс и переопределить mouseReleaseEvent.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 12:42
Не надо никаких кнопок стилизованных, используй QLabel и не парь себе мозг. Для отлова события клика мишкой можно использовать EventFilter либо как тут сказали, унаследовать класс и переопределить mouseReleaseEvent.
А как унаследованный элемент воткнуть в окно, которое сделано в designer'е?
Как я понимаю, если наследовать, то писать надо что-то типа
Код
C++ (Qt)
void QLabelExtended::mouseReleaseEvent(QMouseEvent *)
{
   emit clicked();
}


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 20, 2012, 12:52
А как унаследованный элемент воткнуть в окно, которое сделано в designer'е?
Взять виджет от которого наследовался, разместить в дизайнере, правой кнопкой по виджету и выбрать "Преобразовать в..". Там добавляешь имя образованного класса и имя заголовочного файла. Нажимаешь преобразовать и если сделал правильно то все будет работать.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 16:13
А как унаследованный элемент воткнуть в окно, которое сделано в designer'е?
Взять виджет от которого наследовался, разместить в дизайнере, правой кнопкой по виджету и выбрать "Преобразовать в..". Там добавляешь имя образованного класса и имя заголовочного файла. Нажимаешь преобразовать и если сделал правильно то все будет работать.
Сделал класс, на QLabel нажал ПКМ, выбрал Promote to и в Promoted class name вписал свой класс.
Но сигнал click() так и не появился.


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 20, 2012, 16:27
Сделал класс, на QLabel нажал ПКМ, выбрал Promote to и в Promoted class name вписал свой класс.
Но сигнал click() так и не появился.
Ты в заголовочном файл добавил сигнал click()? Если нет то откуда же он возьмется. Если да, то выложи минимальный проект.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 16:32
Ты в заголовочном файл добавил сигнал click()? Если нет то откуда же он возьмется. Если да, то выложи минимальный проект.
Я позаимствовал код из поста Elfebet
http://forum.vingrad.ru/index.php?showtopic=215040&view=findpost&p=1537598 (http://forum.vingrad.ru/index.php?showtopic=215040&view=findpost&p=1537598)


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 20, 2012, 16:36
Я позаимствовал код из поста Elfebet
http://forum.vingrad.ru/index.php?showtopic=215040&view=findpost&p=1537598 (http://forum.vingrad.ru/index.php?showtopic=215040&view=findpost&p=1537598)
Там сигнал называется clicked. Его анализатор кода не видит или даже компилятор?


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 16:40
Там сигнал называется clicked. Его анализатор кода не видит или даже компилятор?
А как он должен называться? Вроде ж так и должен...
у QPushButton он называется clicked()


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 20, 2012, 16:42
Там сигнал называется clicked. Его анализатор кода не видит или даже компилятор?
А как он должен называться? Вроде ж так и должен...
у QPushButton он называется clicked()
Скинь минимальный проект(без лишнего кода), так я сразу ответ дам, а иначе можно только гадать что там не так.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 16:55
[Скинь минимальный проект(без лишнего кода), так я сразу ответ дам, а иначе можно только гадать что там не так.
Ну как-то так.


Название: Re: Картинка на форме диалога. Как?
Отправлено: V1KT0P от Май 20, 2012, 17:04
Ну как-то так.
Все работает. В аттаче сделано так, как ты хотел.


Название: Re: Картинка на форме диалога. Как?
Отправлено: smartchecker от Май 20, 2012, 17:19
Этот ход мне приходил в голову, но я наивно полагал, что эту операцию можно осуществить в designer'е.


Название: Re: Картинка на форме диалога. Как?
Отправлено: GreatSnake от Май 21, 2012, 14:39
Этот ход мне приходил в голову, но я наивно полагал, что эту операцию можно осуществить в designer'е.
И правильно думал, т.к. есть QPushButton, а у него есть свойство flat.