Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение "наполненого" виджета, с mousePressEvent & mouseMoveEvent ... 
V
    Опции темы
mosg
  Дата 27.7.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день. 

Проблема тривиальная и легкая, но у меня не прёт:

 1) Создается класс QWidget

Код

class PreviewWindow : public QWidget {

    Q_OBJECT

public:
    PreviewWindow(QWidget *parent = 0);
    QSize sizeHint() const;

    void    setWindowFlags(Qt::WindowFlags flags);

    QTextEdit    *textEdit;

protected:
    void    mousePressEvent(QMouseEvent *event);
    void    mouseMoveEvent(QMouseEvent *event);

private:
    QPushButton *closeButton;
    QPoint        dragPosition;
} ;


 2) туда добавляются различные GUI'шные объекты (QGroupBox, QLabel, QTextEdit, QPushButton и т.д.)

Код

PreviewWindow::PreviewWindow(QWidget *parent) : QWidget(parent) {

    QGroupBox *mainGroupBox = new QGroupBox;

    QLabel *imageLabel = new QLabel;
    QImage ucImage(QString("%1/%2").arg(qApp->applicationDirPath()).arg("imgs/khelpcenter_purple.png"));
    imageLabel->setPixmap(QPixmap::fromImage(ucImage));

    textEdit = new QTextEdit;
    textEdit->setReadOnly(true);
    //textEdit->setLineWrapMode(QTextEdit::NoWrap);
    textEdit->setLineWrapMode(QTextEdit::WidgetWidth);

    QHBoxLayout *hBox1 = new QHBoxLayout;
    hBox1->addWidget(imageLabel);
    hBox1->addWidget(textEdit);

    closeButton = new QPushButton(tr("Close (Esc)"));
    closeButton->setIcon(QIcon(QString("%1/%2/%3").arg(ICONS_PATH).arg(ICONS_SUB_32).arg("cancel.png")));

    QHBoxLayout *hBox2 = new QHBoxLayout;
    hBox2->addStretch();
    hBox2->addWidget(closeButton);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addLayout(hBox1);
    layout->addLayout(hBox2);

    mainGroupBox->setLayout(layout);

    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->setContentsMargins(0, 0, 0, 0);
    mainLayout->addWidget(mainGroupBox);

    /**/
    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));

    /**/
    setMouseTracking(true);
    setWindowTitle(tr("Goods features"));
    setLayout(mainLayout);
    resize(500, 180);
}


 3) переопределяю соответственно ф-ции mousePressEvent и mouseMoveEvent для того, чтобы при нажатии LeftButton и перемещении форма вся также перемещалась.

Код

void    PreviewWindow::mousePressEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}


Код

void    PreviewWindow::mouseMoveEvent(QMouseEvent *event) {
    if (event->buttons() & Qt::LeftButton) {
        move(event->globalPos() - dragPosition);
        event->accept();
    }
}


 4) запускаю - и не получается, т.е. mousePressEvent и mouseMoveEvent не вызываются, что и понятно, т.к. только сам предок и может реагировать на эти события.

Так вот как быть?

Заранее спасибо!
PM MAIL WWW ICQ Skype GTalk Jabber YIM MSN   Вверх
mosg
Дата 29.7.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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


 




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


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

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