Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > позиция QMenu


Автор: hawk3500 9.4.2012, 20:13
Доброго времени суток.
Ни как не могу разобраться, может кто подскажет что нибудь.
Описал класс:
Код

class DD_MenuBar : public QMenuBar
{
    Q_OBJECT
public:
    DD_MenuBar( QWidget * parent = 0) : QMenuBar(parent)
    {
        return;
    }
    ~DD_MenuBar()
    {
        return;
    }
    QList<QMenu*> Ml;

    QMenu * addMenu ( const QString & title )
    {
        QMenu * A1=QMenuBar::addMenu(title);
        Ml.append(A1);
        return A1;
    }

protected:
    void mousePressEvent(QMouseEvent *pe)
    {
        QPoint PositionMenuSegment;
        for(int i=0;i<Ml.count();i++)
        {
            PositionMenuSegment=mapFromParent(Ml[i]->pos());
            i=i;
        }
        QMenuBar::mousePressEvent(pe);
    }
};


Создал его экземпляр:
Код

MenuB=new DD_MenuBar(this);
MenuB->addMenu(tr("&File"));
MenuB->addMenu(tr("&File1"));
MenuB->show();


Так вот , при обработке события mousePressEvent, PositionMenuSegment имеет значения 0,0.
При повторном нажатии , оставляя окно на той же позиции, получаю уже реальные отличные от нуля значения.
Получается . что позиция для QMenu задаётся только после срабатывания QMenuBar::mousePressEvent(pe)(на данный момент только такой частный выво могу сделать).
Даже если прописать так:
Код

MenuB=new DD_MenuBar(this);
QPoint He;
QMenu * A1=MenuB->addMenu(tr("&File"));
He=A1->pos();
QMenu * A2=MenuB->addMenu(tr("&File1"));
He=A2->pos();
MenuB->show();

и для A1 и для A2 координаты  (0,0).
Подскажите почему так , и как получить реальные координаты QMenu как глобальные так и относительно родителя.
Заранее благодарен.
С уважением.
RED_HAWK.


Автор: hawk3500 10.4.2012, 18:53
Решено)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)