Russian Qt Forum
Сентябрь 30, 2024, 14:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не вставляются кнопки  (Прочитано 4615 раз)
Livingston
Гость
« : Июль 05, 2008, 19:38 »

Надо чтобы на QFrame появлялись кнопки в месте щелчка мыши. Я пробовал сделать так, но хоть убей ничего не выходит. cout'ом проверял верность передачи координат и события мышки, а кнопок нет...
Код:

QFrame* container;
container->installEventFilter(this);

bool bbb::eventFilter(QObject* obj, QEvent *ev)
{
if(obj==container) {
  if( (ev->type()) == QEvent::MouseButtonPress)
  {
  QPoint start(  ((QMouseEvent*) ev)->pos().x() , ((QMouseEvent*) ev)->pos().y() );
  QSize size( 110,29 );

  QPushButton* but= new QPushButton(container,"aaa");
  but->setGeometry( QRect( start , size ) );

  return TRUE;
  }
}

пытался сделать динамические имена для каждой новой кнопки, но результата нет, да и дело по-моему не в этом.
Записан
ритт
Гость
« Ответ #1 : Июль 05, 2008, 21:05 »

1. не хватает закрывающей фигурной скобки;
2. если obj != container, функция не возвращает значение;
3. конструктора QPushButton(QWidget*, QString) не существует;
4. TRUE - это макрос, тогда как в плюсах предпочтительнее использование констант;
5. баттон создаётся, устанавливается, но просто невидим;
6. стиль написания просто ужасен (это примерно как суржик или гоповский слэнг). советую пользовать астайлер (или аналог).

Код:
bool MainWindow::eventFilter(QObject* obj, QEvent* event)
{
QFrame* container = qobject_cast<QFrame*>(obj);
if(container)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
if(mouseEvent && mouseEvent->type() == QEvent::MouseButtonPress)
{
QPoint topLeft(mouseEvent->pos());
QSize size(110, 29);

QPushButton* button = new QPushButton("aaa", container);
button->setGeometry(QRect(topLeft, size));
button->show();

return true;
}
}

return QMainWindow::eventFilter(obj, event);
}
Записан
Livingston
Гость
« Ответ #2 : Июль 05, 2008, 21:24 »

1. не хватает закрывающей фигурной скобки;
в реальном коде она есть, просто тут не поставил
2. если obj != container, функция не возвращает значение;
понял. А это важно?
3. конструктора QPushButton(QWidget*, QString) не существует;
почему тогда собирается без ошибок?
6. стиль написания просто ужасен (это примерно как суржик или гоповский слэнг). советую пользовать астайлер (или аналог).
сам знаю, но что-то красиво у меня не получается...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июль 05, 2008, 23:48 »

почему тогда собирается без ошибок?

Какая версия Qt?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Livingston
Гость
« Ответ #4 : Июль 06, 2008, 00:13 »

Qt версии 3.3.8
на самом деле, добавил только but->show(); в свой код и все заработало. Больше ничего не менял.
большое спасибо!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Июль 06, 2008, 12:30 »

Qt версии 3.3.8
на самом деле, добавил только but->show(); в свой код и все заработало. Больше ничего не менял.
большое спасибо!

В 3.3.х есть такой конструктор

Код:
QPushButton ( QWidget * parent, const char * name = 0 )

поэтому скомпилилось все без ошибок.

ЗЫ: Так, на будующее, указывай версию Qt, чтобы неприходилось догадываться
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Livingston
Гость
« Ответ #6 : Июль 07, 2008, 00:44 »

хорошо, буду знать на будущее.
но все же после but->show() все работает, вставил, переписал код под то, что мне надо. Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 22.