Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Trademaster от Август 02, 2013, 00:30



Название: [РЕШЕНО]Создание нескольких окон в одной программе.
Отправлено: Trademaster от Август 02, 2013, 00:30
Ребята ,предположим ,я пишу программу ,в которой по клику на иконку калькулятора - запускается калькулятор. Он запускается в отдельном окне . Я сижу и пытаюсь это реализовать.
Я создал меню ,создал калькулятор ,отдеально ,а теперь сижу и думаю ,как запустить калькулятор из меню.
Я пробую создать экземпляр класса калькулятора прямо в menu.cpp и запустить его там же (код ниже) ,но это попросту крашит приложение . Уже 2 часа голову ломал ,как сделать так ,чтоб запускалось окно калькулятора - 0 результатов.
Исходники :
menu.cpp

Код:
#include "menu.h"
#include <QtWidgets>
#include <QDebug>
#include <QApplication>


enum actions
{
    ACT_CALCULATOR = 0,
    ACT_CALENDAR,
    ACT_NOTES,

};



menu::menu(QWidget *parent)
    : QWidget(parent)
{
      calculator *mainCalc = new calculator(parent);
    testWidgetList = new QListWidget();
    testWidgetList->setViewMode(QListView::IconMode);
    testWidgetList->setResizeMode(QListView::Adjust);
    testWidgetList->setDragEnabled(false);

    QListWidget::connect(testWidgetList,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(ItemClicked(QListWidgetItem*)));


    testItemWidget = new QListWidgetItem(QIcon("D:\\qtPictures/calc.png")
                                         , QString("calculator"), testWidgetList);
    testItemWidget->setData(16,ACT_CALCULATOR);
    testWidgetList->addItem(testItemWidget);



    testItemWidget = new QListWidgetItem(QIcon("D:\\qtPictures/calendar.jpg")
                                         , QString("calendar"), testWidgetList);
    testItemWidget->setData(16,ACT_CALENDAR);
    testWidgetList->addItem(testItemWidget);


    testItemWidget = new QListWidgetItem(QIcon("D:\\qtPictures/zametki.png")
                                         , QString("notes"), testWidgetList);
    testItemWidget->setData(16,ACT_NOTES);
    testWidgetList->addItem(testItemWidget);



    QGridLayout *testlay = new QGridLayout;
    testlay->addWidget(testWidgetList);
    setLayout(testlay);
     setWindowTitle(tr("Fuorg"));

}

void menu::ItemClicked(QListWidgetItem *wi)
{
    int action = wi->data(16).toInt();

    qDebug() << "Item clicked: " << action;
    this->handleAction(action);
}

void menu::handleAction(int act)
{
    switch(act)
    {
    case ACT_CALCULATOR:
        mainCalc->show();
        break;
    case ACT_CALENDAR:
        qDebug() << "Calendar";
        break;
    case ACT_NOTES:
        qDebug() << "Notes";
        break;
    default:
        qDebug() << "Unhandled action: " << act;
        break;//do nothing
    }

}

Код:
#ifndef MENU_H
#define MENU_H

#include <QListWidget>
#include <QListWidgetItem>
#include <QIcon>
#include <QlistView>
#include <QGridLayout>
#include <QModelIndex>
#include "calculator.h"

class menu : public QWidget
{
    Q_OBJECT

public:
    menu(QWidget *parent = 0);

    QListWidget *testWidgetList;
    QListWidgetItem *testItemWidget;
    void handleAction(int act);
    calculator *mainCalc;
public slots:
    void ItemClicked(QListWidgetItem *wi);

};

#endif // MENU_H



Название: Re: Создание нескольких окон в одной программе.
Отправлено: kambala от Август 02, 2013, 00:48
вместо calculator *mainCalc = new calculator(parent); надо писать mainCalc = new calculator(parent); поучи С++.

если окно твоего калькулятора будет отображаться внутри menu, а не отдельным окном, тогда надо mainCalc = new calculator;


Название: Re: Создание нескольких окон в одной программе.
Отправлено: Trademaster от Август 02, 2013, 08:00
вместо calculator *mainCalc = new calculator(parent); надо писать mainCalc = new calculator(parent); поучи С++.

если окно твоего калькулятора будет отображаться внутри menu, а не отдельным окном, тогда надо mainCalc = new calculator;

Спасибо за помощь.
Я бы с радостью учил С++ и дальше ,по учебнику (я как бы с учебника и начал) ,но после прочтения 400 страниц ,я просто понял ,что у меня есть база ,что бы начать уже изучать С++ на практике ,потому-что когда читаешь книгу не все запоминаешь ,иногда читаешь на автомате и даже через секунду уже не помнишь ,да и не так интересно. А делая что - то ,попутно я буду изучать С++ .


Название: Re: [РЕШЕНО]Создание нескольких окон в одной программе.
Отправлено: Bepec от Август 02, 2013, 09:12
Не зря в учебниках после каждой главы (или в главе) приведены примеры и задания. :) Их поделайте и опыт постепенно выкинет вас на более высокий уровень :)


Название: Re: [РЕШЕНО]Создание нескольких окон в одной программе.
Отправлено: kambala от Август 02, 2013, 10:49
я просто понял ,что у меня есть база ,что бы начать уже изучать С++ на практике
А делая что - то ,попутно я буду изучать С++ .
вот и изучал бы С++ на практике, а в Qt пока не лез, потому что будешь задавать тонну вопросов, больше половины которых будут связаны непосредственно с языком