crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

coo_zoo
  опции профиля:
сообщение 15.10.2012, 0:17
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.3.2010
Пользователь №: 1517

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте,
Итак не много замучился вопросом, как же остановить рекурсию :). Коллективный разум он большой и умный, думаю поможет.
Идея следующая сохранение пропорций окна при изменении его размеров.
mainwindow.h
Раскрывающийся текст
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QResizeEvent>
#include <QDebug>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();


private:
    Ui::MainWindow *ui;
    void resizeEvent ( QResizeEvent * event );
};
#endif // MAINWINDOW_H


main.cpp
Раскрывающийся текст
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


mainwindow.cpp
Раскрывающийся текст
#include "mainwindow.h"
#include "ui_mainwindow.h"


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

MainWindow::~MainWindow()
{
    delete ui;
}


void  MainWindow::resizeEvent ( QResizeEvent * event )
   {
    if (event)
    {
    int sizeheight=event->size().height();
    int oldsizeheight=event->oldSize().height();
    int sizewidth=event->size().width();
    int oldsizewidth=event->oldSize().width();
    ui->label->setText(QString::number(sizeheight));
    int newheight=(sizewidth)*9/16;
    ui->label_2->setText(QString::number(sizewidth));

        if(sizewidth!=oldsizewidth)
        {
            setMaximumHeight(newheight);
            setMinimumHeight(newheight);
        }
    }
   }


Главное окно имеет всего лишь два элемента label и label_2 при изменении размеров окна туда выводятся высота и ширина.
Проблема в том что по понятным причинам вызывается рекурсия, которая кстати по непонятным причинам :) прекращается тогда, когда окно возвращается к исходным размерам, к тем что были до ресайза.
Прошу помощи и дельного совета как "отсеять" рекурсию?
У меня была идея если не нажата левая кнопка мыши значит прекратить. Но в силу своего нубизма не понимаю как это сделать, хотя вроде интуитивно догадываюсь что как-то фильтрами, но мои попытки не увенчались успехом.
Буду благодарен за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 25.5.2025, 7:03