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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Минимизация окна в трей.  (Прочитано 13449 раз)
rezor
Гость
« : Сентябрь 20, 2009, 18:19 »

Собственно написал все по примеру но в трей приложение не сворачивается и ошибок при компиляции не возникает подскажите где проблема???
Код:
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QDialog.h>
#include <QListView>
#include <QStringListModel>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QDateTimeEdit>
#include <qlabel>
#include <QFile>
#include <QTextStream>
#include <QSystemTrayIcon.h>
#include <qevent.h>
#include <iostream.h>
class QStringList;
class QComboBox;
class QListView;
class QLineEdit;
class QHBoxLayout;


namespace Ui
{
    class MainWindowClass;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();  
    void setEnabled(bool enabled);


private:

    QWidget *win;
    QGroupBox *groupBox_1;
    QGroupBox *groupBox_2;
    Ui::MainWindowClass *ui;    
    QLineEdit *transkRip;
    QPushButton *addButton;
    QPushButton *delButton;
    QPushButton *closeButton;
    QPushButton *insertButton;
    QComboBox *slovoBox;
    QListView *pereVod;
    QDateTimeEdit *timeEdit;
    QStringListModel *model;
    QStringList *list;
    QVBoxLayout *layout_left;
    QVBoxLayout *layout_right;
    QHBoxLayout *addLayout_left;    
    QHBoxLayout *mainLayout;
    QLabel *slovoLabel;
    QSystemTrayIcon *tray;
    void insert();


 public slots:
void slotPlaceToTray();
int input();

signals:
void signalPlaceToTray();
protected:
void changeEvent(QEvent*);
void closeEvent(QCloseEvent*);
};
#endif // MAINWINDOW_H


Код:
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);

win=new QWidget;




    slovoBox=new QComboBox(win);
    slovoBox->setEditable(true);
    transkRip=new QLineEdit(win);
    timeEdit= new QTimeEdit(win);
    pereVod= new QListView(win);
    slovoLabel=new QLabel(tr("&Slovo"));
    slovoLabel->setBuddy(slovoBox);

    list= new QStringList;
    *list<<"a"<<"b"<<"c";
    model=new QStringListModel (*list);
    pereVod->setModel(model);
    pereVod->setSelectionMode(QAbstractItemView::ExtendedSelection);
    tray= new QSystemTrayIcon(QIcon(":/icon/apply.png"),this);
    closeButton= new QPushButton ("Close",win);
    addButton=new QPushButton(tr("Add"),win);
    delButton=new QPushButton(tr("Del"),win);




    .......

    win->resize(550,300);
    win->show();


    

   connect(this,SIGNAL(signalPlaceToTray()),this,SLOT(slotPlaceToTray()),Qt::QueuedConnection);
    
    connect(closeButton,SIGNAL(clicked()),win,SLOT(close()));
    connect(addButton, SIGNAL(clicked()), this, SLOT(input()));
}


Код:
minimizetray.h

#include "mainwindow.h"

void MainWindow::closeEvent(QCloseEvent *event)
{
    if(tray->isVisible())
    {
        hide();
        event->ignore();

    }

}
void MainWindow::changeEvent(QEvent *event)
{
    if(event->type()==QEvent::WindowStateChange)
    {
        if(isMinimized())
        {
            event->ignore();
            emit signalPlaceToTray();
            return;
        }
    }
    QMainWindow::changeEvent(event);
}
void MainWindow::slotPlaceToTray()
{
    tray->show();
    hide();
}

void MainWindow::insert()
    {
    int row=pereVod->currentIndex().row();
    model->insertRows(row,1);
    QModelIndex index=model->index(row);
    pereVod->setCurrentIndex(index);
    pereVod->edit(index);
   }

int MainWindow::input()
{
    QFile file("sha.txt");
if(!file.open(QIODevice::WriteOnly)){
    cout<<"Cannot open"<<qPrintable(file.errorString())<<endl;
return -1;}
QTextStream out(&file);
out<<slovoBox;
}
MainWindow::~MainWindow()
{

}


« Последнее редактирование: Сентябрь 20, 2009, 18:23 от rezor » Записан
gueRRero
Гость
« Ответ #1 : Сентябрь 21, 2009, 08:47 »

На первый взгляд, здесь:
Код:
minimizetray.h

void MainWindow::slotPlaceToTray()
{
    tray->show();
    /*hide(); Так было*/
    this->close(); // Так надо
}
Записан
rezor
Гость
« Ответ #2 : Сентябрь 21, 2009, 18:14 »

Не помогло!
Записан
BaltikS
Гость
« Ответ #3 : Сентябрь 22, 2009, 16:03 »

Попробуй так qApp->postEvent(this, new QCloseEvent());
Не знаю уж в чём фишка, но у меня именно так работало...
Записан
SABROG
Гость
« Ответ #4 : Сентябрь 22, 2009, 17:07 »

Код
C++ (Qt)
if(tray->isVisible())

Ты здесь накосячил, забыл ! поставить.

Я у себя проверил, у меня все работает на Qt 4.5.2 WinXP.
Записан
rezor
Гость
« Ответ #5 : Сентябрь 23, 2009, 21:12 »

Тоже не помогает . У меня 4.5.0 XP. Ни сварачивается в трей ни при минимизации, ни при закрытии окна.
« Последнее редактирование: Сентябрь 23, 2009, 21:15 от rezor » Записан
rezor
Гость
« Ответ #6 : Сентябрь 27, 2009, 18:11 »

Ни каких мыслей больше нет ни у кого??
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Сентябрь 27, 2009, 23:44 »

Взгляни на System Tray Icon Example (QTDIR/examples/desktop/systray)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
bahus
Гость
« Ответ #8 : Сентябрь 28, 2009, 13:49 »

Как сказали смотри пример из Qt. Ну и вот моя выжимка из этого примера, Qt 4.5.0 работает на win XP и Kubuntu 9.04


mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSystemTrayIcon>
#include "ui_mainwindow.h"

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

    public:
        MainWindow(QWidget *parent = 0);

    protected:
        void closeEvent(QCloseEvent *event);

    private slots:
        void iconActivated(QSystemTrayIcon::ActivationReason reason);
     
    private:
        QAction *minimizeAction;
        //QAction *maximizeAction;
        QAction *restoreAction;
        QAction *quitAction;
       
        QSystemTrayIcon *trayIcon;
        QMenu *trayIconMenu;

};

#endif // MAINWINDOW_H




mainwindow.cpp
Код:
#include <QtGui>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
{
    setupUi(this);
    //******************Create TrayIcon Menu***************************************
    minimizeAction = new QAction(tr("Mi&nimize"), this);
    connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));

    //maximizeAction = new QAction(tr("Ma&ximize"), this);
    //connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));

    restoreAction = new QAction(tr("&Restore"), this);
    connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));

    quitAction = new QAction(tr("&Quit"), this);
    connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));

    trayIconMenu = new QMenu(this);
    trayIconMenu->addAction(minimizeAction);
    //trayIconMenu->addAction(maximizeAction);
    trayIconMenu->addAction(restoreAction);
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quitAction);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setContextMenu(trayIconMenu);
    //********************************************************************************

    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
            this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

    trayIcon->setIcon(QIcon(":/icons/Download.png"));
    setWindowIcon(QIcon(":/icons/Download.png"));
    trayIcon->show();
   
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (trayIcon->isVisible()) {
        hide();
        event->ignore();
    }
}

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
    /*switch (reason) {
        case QSystemTrayIcon::Trigger:
        case QSystemTrayIcon::DoubleClick:
            iconComboBox->setCurrentIndex((iconComboBox->currentIndex() + 1)
                                      % iconComboBox->count());
            break;
        case QSystemTrayIcon::MiddleClick:
            showMessage();
            break;
        default:
        ;
    }*/
}



main.cpp
Код:
#include <QApplication>
#include "ui/mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    MainWindow *window = new MainWindow;
    window->hide();
    return app.exec();
}
Записан
rezor
Гость
« Ответ #9 : Сентябрь 29, 2009, 16:35 »

Все исправил проблема заключалась в том что я создавал новый Qwidget , мне так удобней было компоновать виджеты из-за этого возникла путаница.Всем спасибо за помощь.
« Последнее редактирование: Сентябрь 29, 2009, 16:58 от rezor » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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