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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Создание нескольких окон в одной программе.  (Прочитано 3851 раз)
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

« Последнее редактирование: Август 02, 2013, 08:00 от Trademaster » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 02, 2013, 00:48 »

вместо calculator *mainCalc = new calculator(parent); надо писать mainCalc = new calculator(parent); поучи С++.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Trademaster
Гость
« Ответ #2 : Август 02, 2013, 08:00 »

вместо calculator *mainCalc = new calculator(parent); надо писать mainCalc = new calculator(parent); поучи С++.

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

Спасибо за помощь.
Я бы с радостью учил С++ и дальше ,по учебнику (я как бы с учебника и начал) ,но после прочтения 400 страниц ,я просто понял ,что у меня есть база ,что бы начать уже изучать С++ на практике ,потому-что когда читаешь книгу не все запоминаешь ,иногда читаешь на автомате и даже через секунду уже не помнишь ,да и не так интересно. А делая что - то ,попутно я буду изучать С++ .
Записан
Bepec
Гость
« Ответ #3 : Август 02, 2013, 09:12 »

Не зря в учебниках после каждой главы (или в главе) приведены примеры и задания. Улыбающийся Их поделайте и опыт постепенно выкинет вас на более высокий уровень Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Август 02, 2013, 10:49 »

я просто понял ,что у меня есть база ,что бы начать уже изучать С++ на практике
А делая что - то ,попутно я буду изучать С++ .
вот и изучал бы С++ на практике, а в Qt пока не лез, потому что будешь задавать тонну вопросов, больше половины которых будут связаны непосредственно с языком
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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