Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] ошибка при обработке closeEvent 
V
    Опции темы
anatox91
Дата 23.3.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



всем привет! проблема такая
пытаюсь я создать свой виджет для closeEvent и компилятор ругается на ошибки - вроде я неправильно пытаюсь передать объект closeEvent, вобщем видать я что-то намудил с указателями, подскажите пожалуйста как правильно, вот коды:

main.cpp
Код

#include <QtGui>
#include "Notebook.h"
#include "wgtClose.h"

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    Notebook ntbk;
    ntbk.resize(700, 500);
    ntbk.show();
    return app.exec();
}


Notebook.h
Код

#ifndef NOTEBOOK_H
#define NOTEBOOK_H

#include <QWidget>
#include <QTextEdit>
#include <QCheckBox>

class QWidget;
class Notebook : public QWidget {
      Q_OBJECT
public:
       Notebook(QWidget *parent = 0);
public:
       QTextEdit *textArea;
       QCheckBox *checkbox;
protected:
          virtual void closeEvent(QCloseEvent *ce);
public slots:
       void blockText();
       };
#endif


Notebook.cpp
Код

#include <QtGui>
#include "Notebook.h"
#include "wgtClose.h"

Notebook::Notebook(QWidget *parent) : QWidget (parent) {
                           textArea = new QTextEdit("YOUR TEXT");
                           checkbox = new QCheckBox("Read Only");
                           connect(checkbox, SIGNAL(clicked()), SLOT(blockText()));
                           setWindowFlags(Qt::WindowMinimizeButtonHint); 
                           setWindowTitle("Note");  
                           textArea->resize(350, 350);
                           QPalette pal = textArea->palette();
                           pal.setColor(QPalette::Highlight, Qt::red);
                           pal.setColor(QPalette::HighlightedText, QColor(6, 6, 248));
                           textArea->setPalette(pal);
                           QPushButton *btnUndo = new QPushButton("Undo");  
                           connect(btnUndo, SIGNAL(clicked()), textArea, SLOT(undo())); 
                           QPushButton *btnRedo = new QPushButton("Redo"); 
                           connect(btnRedo, SIGNAL(clicked()), textArea, SLOT(redo())); 
                           QPushButton *btnClear = new QPushButton("Clear"); 
                           connect(btnClear, SIGNAL(clicked()), textArea, SLOT(clear()));
                           QPushButton *btnCopy = new QPushButton("Copy to buffer"); 
                           connect(btnCopy, SIGNAL(clicked()), textArea, SLOT(copy())); 
                           QPushButton *btnCut = new QPushButton("Cut to buffer");  
                           connect(btnCut, SIGNAL(clicked()), textArea, SLOT(cut())); 
                           QPushButton *btnPaste = new QPushButton("Paste"); 
                           connect(btnPaste, SIGNAL(clicked()), textArea, SLOT(paste()));
                           QPushButton *btnQuit = new QPushButton("Quit");
                           connect(btnQuit, SIGNAL(clicked()), qApp, SLOT(quit())); 
                           QVBoxLayout *vbLayout = new QVBoxLayout; 
                           vbLayout->addWidget(btnUndo);
                           vbLayout->addWidget(btnRedo);
                           vbLayout->addWidget(btnClear);
                           vbLayout->addWidget(btnCopy);
                           vbLayout->addWidget(btnCut);
                           vbLayout->addWidget(btnPaste);
                           vbLayout->addWidget(checkbox);
                           vbLayout->addWidget(btnQuit);
                           QHBoxLayout *layoutMain = new QHBoxLayout;
                           layoutMain->addWidget(textArea);  
                           layoutMain->addLayout(vbLayout);  
                           setLayout(layoutMain);      
}
void Notebook::blockText() {
     if(checkbox->isChecked()) {
                               textArea->setReadOnly(true);
                               }
     else {
          textArea->setReadOnly(false);
          }
}
void Notebook::closeEvent(QCloseEvent *ce) {
    wgtClose *wgtcl = new wgtClose(ce);
    wgtcl->show();



wgtClose.h
Код

#ifndef WGTCLOSE_H_
#define WGTCLOSE_H_

#include <QtGui>
class wgtClose : public QWidget {
      Q_OBJECT
public:
       wgtClose(QCloseEvent *ce, QWidget *parent = 0);
       };
#endif


wgtClose.cpp
Код

#include <QtGui>
#include "wgtClose.h"

wgtClose::wgtClose(QCloseEvent *ce, QWidget *parent) : QWidget (parent) {
    QPushButton *pcmdA = new QPushButton("Yes");
    connect(pcmdA, SIGNAL(clicked()), ce, SLOT(accept()));
    QPushButton *pcmdB = new QPushButton("No");
    connect(pcmdB, SIGNAL(clicked()), ce, SLOT(ignore()));
    QLabel *lbl = new QLabel("<h3>Do you really want to quit?<\h3>");
    QHBoxLayout *lefttoright = new QHBoxLayout;
    lefttoright->addWidget(pcmdA);
    lefttoright->addStretch(1);
    lefttoright->addWidget(pcmdB);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lbl);
    layout->addLayout(lefttoright);
    setLayout(layout);
    resize(170, 40);
}


или лучше QMessageBox'ом делать?
заранее спасибо!


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Mixolap
Дата 23.3.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.1.2008

Репутация: нет
Всего: нет



А для чего столько кода? Только для того, чтоб спросить выходим или нет? Если да, то сделай лучше через                 
int ret = QMessageBox::warning(this, tr("Question"),
                             QString(tr("Do you realy want to quit?")),
                             QMessageBox::Yes,
                             QMessageBox::No);

Это сообщение отредактировал(а) Mixolap - 23.3.2008, 20:35
PM MAIL   Вверх
anatox91
Дата 23.3.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



это то понятно, хотел попытаться сам такое сделать просто  smile 
так а ошибка то в чем?  smile  уже как только не пытался передавать ему этот объект...


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
SABROG
Дата 23.3.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



На этих строчках ошибка ?

Код

    connect(pcmdA, SIGNAL(clicked()), ce, SLOT(accept()));
    QPushButton *pcmdB = new QPushButton("No");
    connect(pcmdB, SIGNAL(clicked()), ce, SLOT(ignore()));



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
archimed7592
Дата 23.3.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



anatox91,
1. Как неявно намекнул SABROG, QEvent не имеет соответствующих слотов accept/ignore - это обыкновенные ф-ции.
2. Если очень хочешь сделать сам, то, во-первых, учти п.1, во-вторых, учти что соответствующее окошко должно быть модальным(наследуйся не от QWidget, а от QDialog, либо добивайся модальности явно).

Добавлено через 3 минуты и 25 секунд
3. Конечно, многим лучше воспользоваться специально предусмотренным для это MessageBox по нескольким причинам:
3а. простота использования.
3б. нативный вид MessageBox'а.
3в. велосипеды изобретать плохо(здесь, пожалуй, исключение: ты вроде хочешь научиться делать сам руками, но это полезно только чтобы попробовать, а не использовать такие велосипеды повсеместно).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
anatox91
Дата 24.3.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



понял, буду знать, всем спасибо за ответы  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.