Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: zoro86 от Сентябрь 30, 2010, 09:21



Название: Меню не выпадает...:-(
Отправлено: zoro86 от Сентябрь 30, 2010, 09:21
Не могу понять в чем проблема ...

Создал MainWindow в QtDesigner-e сделал там меню...

Код:
Терминал
->Обновить
->Выдрать тему
                            ->Windows Style
                            ->Mac

далее..

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "ui_mainwindow.h"
#include "NumPadWidget.h"
#include "AdminDialogClass.h"
#include "MassageDialogClass.h"
#include "parserXmlProviderData.h"
#include "GetServicesClass.h"

class RegistrationDialog;
class InputNumpad;
class AdminDialogClass;
class MassageDialogClass;
class ParsXmlPrvData;
class GetServices;
class QTimer;

class MainWindow  : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    bool filterEvent(const QEvent* event);
    bool checUserInBase();
...

.cpp
Код:
#include <QtSql>
#include <QtCore>
#include <QTextStream>
#include "mainwindow.h"
#include "Registration.h"
#include "connection.h"


MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);

    //Установка кодировки для интерфейса
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
...

компилю все такое..

при запуске при наведении мышкой на меню оно не выделяется... и при щелчке мышкой не выпадает...??

далее сделал следующее..

 Унаследовался от Ui::MainWindow оставил в форме только QMenuBar...
а менюшки и экшены решил сам накатать..

.h
Код:
 QMenu *menuTerminal;
    QMenu *menuView;
    QMenu *menuStyle;
    QMenu *menuLang;
    QMenu *menuHelp;

    QAction *actionUpdateConfig;
    QAction *actionUpdateVirsion;
    QAction *actionChecConnect;
    QAction *actionChecMassages;
    QAction *actionSettings;
    QAction *actionExit;
    QAction *actionRestartTerminal;
    QAction *actionWindows;
    QAction *actionPardokht_Lite;
    QAction *actionPardokht_Fire;
    QAction *actionPageFold;
    QAction *actionVersion;
    QAction *actionLangRu;
    QAction *actionLangEng;
    QAction *actionLangTaj;

    void createActions();
    void createMenus();

.cpp
Код:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);

    //Установка кодировки для интерфейса
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));

    this->createActions();
    this->createMenus();

....

void MainWindow::createMenus(){

    menuTerminal = Ui::MainWindow::menuBar->addMenu(QString("Терминал"));
    menuView = Ui::MainWindow::menuBar->addMenu(QString("Вид"));
    menuStyle = menuView->addMenu(QString("Внешний вид"));
    menuLang = menuView->addMenu(QString("Язык"));
    menuHelp = Ui::MainWindow::menuBar->addMenu(QString("О программе"));

      menuTerminal->addAction(actionUpdateConfig);
      menuTerminal->addAction(actionUpdateVirsion);
      menuTerminal->addAction(actionChecConnect);
      menuTerminal->addAction(actionChecMassages);
      menuTerminal->addAction(actionRestartTerminal);
      menuTerminal->addAction(actionSettings);
      menuTerminal->addAction(actionExit);

      menuView->addAction(menuStyle->menuAction());
      menuView->addAction(menuLang->menuAction());
   
.....
}

void MainWindow::createActions(){
    actionUpdateConfig = new QAction(this);
    actionUpdateConfig->setObjectName(QString::fromUtf8("actionUpdateConfig"));
    QIcon icon;
    icon.addFile(QString::fromUtf8(":/images/icons/updata.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionUpdateConfig->setIcon(icon);
    actionUpdateVirsion = new QAction(this);
    actionUpdateVirsion->setObjectName(QString::fromUtf8("actionUpdateVirsion"));
    QIcon icon1;
    icon1.addFile(QString::fromUtf8(":/images/icons/update_version.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionUpdateVirsion->setIcon(icon1);
    actionChecConnect = new QAction(this);
    actionChecConnect->setObjectName(QString::fromUtf8("actionChecConnect"));
    QIcon icon2;
    icon2.addFile(QString::fromUtf8(":/images/icons/statusnet.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionChecConnect->setIcon(icon2);
    actionChecMassages = new QAction(this);
    actionChecMassages->setObjectName(QString::fromUtf8("actionChecMassages"));
    QIcon icon3;
    icon3.addFile(QString::fromUtf8(":/images/icons/message.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionChecMassages->setIcon(icon3);
    actionSettings = new QAction(this);
    actionSettings->setObjectName(QString::fromUtf8("actionSettings"));
    QIcon icon4;
    icon4.addFile(QString::fromUtf8(":/images/icons/settings.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionSettings->setIcon(icon4);
    actionExit = new QAction(this);
    actionExit->setObjectName(QString::fromUtf8("actionExit"));
    QIcon icon5;
    icon5.addFile(QString::fromUtf8(":/images/icons/exit.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionExit->setIcon(icon5);
    actionRestartTerminal = new QAction(this);
    actionRestartTerminal->setObjectName(QString::fromUtf8("actionRestartTerminal"));
    QIcon icon6;
    icon6.addFile(QString::fromUtf8(":/images/icons/reload.png"), QSize(), QIcon::Normal, QIcon::Off);
    actionRestartTerminal->setIcon(icon6);
   
....

}

проблема такая же ... при наведении на меню Терминал и Вид они не активируются и не выподают при щелчке по ним...
а вот при наведении на меню О программе она активируется и выпадает при щелчке.. далее после выподения меню О программе при нажатии на кнопку в лево падает и Вид и Терминал...

кто нить знает что такое не так....??


Название: Re: Меню не выпадает...:-(
Отправлено: GreatSnake от Сентябрь 30, 2010, 09:26
чем занимается MainWindow::filterEvent()?


Название: Re: Меню не выпадает...:-(
Отправлено: lit-uriy от Сентябрь 30, 2010, 10:39
->Выдрать тему
:)


Название: Re: Меню не выпадает...:-(
Отправлено: zoro86 от Сентябрь 30, 2010, 14:32
bool MainWindow::filterEvent(const QEvent* event)
{
    if (event->type() == QEvent::RequestSoftwareInputPanel) {
        updatePosition();
        inputNumpad->show();
        return true;
    } else if (event->type() == QEvent::CloseSoftwareInputPanel) {
        inputNumpad->hide();
        return true;
    }
    return false;
}


Название: Re: Меню не выпадает...:-(
Отправлено: GreatSnake от Сентябрь 30, 2010, 14:43
И кто использует этот filterEvent()?

У вас явная проблема с обработкой событий.
А вот код, где эти проблемы, вы нам не показываете.


Название: Re: Меню не выпадает...:-(
Отправлено: zoro86 от Сентябрь 30, 2010, 14:46
Я удалил void updatePosition(); и bool filterEvent(const QEvent* event);

там в принципе ничего в коде не осталось.

там проста клава использовалась...

объект клаву я тоже удалил..


Название: Re: Меню не выпадает...:-(
Отправлено: zoro86 от Октябрь 01, 2010, 08:02
Нашел Баг....

Тут у меня был объект который занимался парсингом xml конфигурации, который наследуется от QObject так вот я при использовании его в MainWindow давал в parent значение this :-\ :-\ :-\ теперь после того как убрал все стало нормально.. ;D ;)