crossplatform.ru

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


  Ответ в QDialog
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Steklova Olga Дата 3.3.2012, 19:27
  Ov3r1oad, а не проще ли тогда вместо использования QProgressDialog
создать просто виджет, на котором разместить QProgressBar и QLabel? И делайте тогда с ними, что хотите :clapping:
Ov3r1oad Дата 2.3.2012, 17:08
  Steklova Olga, ну так а как сделать так, чтобы по кнопке cancel он не закрывался? Собственно, в этом был вопрос.
Steklova Olga Дата 2.3.2012, 16:49
  Ov3r1oad,
1) код показывайте так:
[*expand=main.cpp][*code]код модуля[*/code][*/expand]
вместо символа * ничего не должно быть

2) у меня получился такой пример: :)
test_closeevent.pro
QT       += core gui
TARGET = test_closeevent
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp \
    myprogressdialog.cpp
HEADERS  += mainwindow.h \
    myprogressdialog.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.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include "myprogressdialog.h"

class QProgressBar;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    MyProgressDialog *prbar;
};

#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    prbar = new MyProgressDialog();
    prbar->setMinimum(0);
    prbar->setMaximum(100);
    prbar->setValue(50);
    prbar->show();
}

MainWindow::~MainWindow()
{

}
myprogressdialog.h
#ifndef MYPROGRESSDIALOG_H
#define MYPROGRESSDIALOG_H

#include <QProgressDialog>

class QLineEdit;

class MyProgressDialog : public QProgressDialog
{
    Q_OBJECT
public:
    explicit MyProgressDialog(QWidget *parent = 0);
    void closeEvent(QCloseEvent *event);
    QString text;
    QLineEdit *edit;
signals:

public slots:
    void set_text(QString te);

};

#endif // MYPROGRESSDIALOG_H
myprogressdialog.cpp
#include "myprogressdialog.h"

#include <QtGui>

MyProgressDialog::MyProgressDialog(QWidget *parent) :
    QProgressDialog(parent)
{    
    edit = new QLineEdit(this);
    connect(edit, SIGNAL(textChanged(QString)), this, SLOT(set_text(QString)));
    edit->setText("");
    edit->setText("N");
}

void MyProgressDialog::set_text(QString te)
{
    text = edit->text();
}

void MyProgressDialog::closeEvent(QCloseEvent *event)
{
    if (text == "N")
        //MyProgressDialog не будет закрываться по кнопке "X",
        //пока текст в edit = "N"
        event->ignore();
    else
        //чтобы закрыть MyProgressDialog по кнопке "X",
        //меняем при работе проги текст в edit (чтобы был != "N")
        //и жмем кнопку закрытия MyProgressDialog
        event->accept();

    //независимо от текста в edit, можно закрыть MyProgressDialog по кнопке "Cancel"
}

Ov3r1oad Дата 2.3.2012, 15:07
  UPD: а, оказывается, данный ивент не вызывается при нажатии на кнопку, только при нажатии на крестик (ну либо ещё что-то).
Ov3r1oad Дата 2.3.2012, 14:32
  class MyDialog: public QProgressDialog
{
Q_OBJECT

public:
MyDialog(QWidget* parent);
void closeEvent (QCloseEvent *event);
};

class MyClass
{
public:
MyDialog Dialog;
};


void MyDialog::closeEvent(QCloseEvent* event)
{
event->ignore();
}


class MyDialog: public QProgressDialog
{
Q_OBJECT

public:
MyDialog(QWidget* parent);
void closeEvent (QCloseEvent *event);
};

class MyClass
{
public:
MyDialog Dialog;
};


void MyDialog::closeEvent(QCloseEvent* event)
{
event->ignore();
}

сорь, чё-то не тот тег прописал =)
Steklova Olga Дата 2.3.2012, 14:22
  Ov3r1oad, код покажите.
Ov3r1oad Дата 2.3.2012, 14:18
  Steklova Olga, хм, написал отдельный класс MyProgressDialog c переопределённым методом void closeEvent(QCloseEvent *event). В нём банально поставил event->ignore(). По идеи, теперь окно у меня вообще не должно закрываться, но почему-то не работает. Окошко реагирует также, как будто я ничего и не писал.
Steklova Olga Дата 2.3.2012, 12:36
  Ov3r1oad, QProgressDialog пока не использовала. Но есть чудная вещь под названием "Справка". Смотрите:

void QProgressDialog::closeEvent ( QCloseEvent * e ) [virtual protected]
Reimplemented from QWidget::closeEvent().

void QWidget::closeEvent ( QCloseEvent * event ) [virtual protected]
This event handler is called with the given event when Qt receives a window close request for a top-level widget from the window system.
By default, the event is accepted and the widget is closed. You can reimplement this function to change the way the widget responds to window close requests. For example, you can prevent the window from closing by calling ignore() on all events.
Main window applications typically use reimplementations of this function to check whether the user's work has been saved and ask for permission before closing. For example, the Application Example uses a helper function to determine whether or not to close the window:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
See also event(), hide(), close(), QCloseEvent, and Application Example.

Цитата(Litkevich Yuriy @ 1.3.2012, 19:57) *
Можно создать "Действие" (QAction), назначить ему комбинацию горячих клавиш.
И установить это Действие для виджета (QWidget->setAction(...)), который видно в начальный момент времени.

ИМХО у QWidget нет setAction.
При создании действия указывается его родитель, например виджет:
action = new QAction(parent_widget); :)
Ov3r1oad Дата 2.3.2012, 11:58
  Steklova Olga, это QProgressDialog, на нём только одна кнопка. Я просто думал, может есть какой-то хинт, чтобы окно не закрывалось. По сути, мне надо, чтобы при нажатии на одну и ту же кнопку, окно сначала не закрывалось, а потом (если опять нажать на эту кнопку), оно закрылось.
Steklova Olga Дата 2.3.2012, 11:55
 
Цитата(Ov3r1oad)
как сделать так, чтобы после нажатия на кнопку окно не закрывалось?
На какую кнопку и какое окно?

Если у вас диалоговое окно и на нем QDialogButtonBox с кнопками, для которых заданы роли QDialogButtonBox::AcceptRole и QDialogButtonBox::RejectRole, то, конечно, при нажатии на такую кнопку окно закроется.
Не делайте родителем кнопки QDialogButtonBox, и будет вам счастье :)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 0:05