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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Модальный диалог  (Прочитано 24081 раз)
enola
Гость
« : Сентябрь 07, 2006, 14:55 »

Пытаюсь сделать модальный диалог с кнопочками "accept" и "cancel" с соответствующими сигналами;
вот так работает:
Код:
MessageDialog *message = new MessageDialog(this);
message->show();


а вот так кнопки не нажимаются:
Код:
MessageDialog *message = new MessageDialog(this);
if (message->exec() == QDialog::Accepted) {
   // ....
}

в чем проблема?
Записан
bigirbis
Гость
« Ответ #1 : Сентябрь 07, 2006, 15:41 »

Цитировать
а вот так кнопки не нажимаются:

ниасилил
Ты от чего наследуешься? От QDialog или от QMessageBox?

...может тебя устроят стандартные статики QMessageBox?
Записан
enola
Гость
« Ответ #2 : Сентябрь 07, 2006, 15:55 »

Цитата: "bigirbis"

Ты от чего наследуешься? От QDialog или от QMessageBox?

от QDialog.

Цитата: "bigirbis"
...может тебя устроят стандартные статики QMessageBox?

Не, не подойдет у меня там свой интерфейс рисуется.

вот что делаю в конструкторе диалога:
Код:
QPushButton *okButton = new QPushButton(tr("Продолжить"), this);
QPushButton *cancelButton = new QPushButton(tr("Отмена"), this);
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));

при show данные кнопки нажимаются а при exec нет!???
 Грустный
Записан
bigirbis
Гость
« Ответ #3 : Сентябрь 07, 2006, 16:15 »

Ты слоты accept() и reject() переопределял?
Если да, то для решения проблемы скорее всего в конце слотов не хватает строчки QDialog::accept(); и QDialog::reject();
Записан
enola
Гость
« Ответ #4 : Сентябрь 07, 2006, 16:17 »

Цитата: "bigirbis"
Ты слоты accept() и reject() переопределял?
Если да, то для решения проблемы скорее всего в конце слотов не хватает строчки QDialog::accept(); и QDialog::reject();

нет, а что нужно?
Записан
bigirbis
Гость
« Ответ #5 : Сентябрь 07, 2006, 16:31 »

Цитировать
нет, а что нужно?

...нет, слоты переопределять необязательно, просто и такая проблема могла иметь место...

Побыстрому сваял диалог. Вот код. Все работает.
Код:

setLayout( new QHBoxLayout );
QPushButton * buttonAccept = new QPushButton( "accept" );
QPushButton * buttonReject = new QPushButton( "reject" );
layout()->addWidget( buttonAccept );
layout()->addWidget( buttonReject );

connect( buttonAccept, SIGNAL( clicked() ), SLOT( accept() ) );
connect( buttonReject, SIGNAL( clicked() ), SLOT( reject() ) );

Если не заведется, шли код - посмотрим. Все дело, наверное, в конце рабочего дня Улыбающийся
Записан
enola
Гость
« Ответ #6 : Сентябрь 07, 2006, 16:43 »

вот нашел затык:
Код:
setWindowFlags(Qt::FramelessWindowHint);

мне нужно чтобы диалог был без "заголовка".
Так можно сделать или нужно наследовать от QWidget  и писать ручками?

P.S. чуть поправлюсь мне нужно чтобы этот диалог был в размер главного окна и прозрачный без рамки вот с флагом с этим так и получается только кнопки не нажимаются, отключаю флаг все нормально, только диалог отдельно от окна!

вот мой диалог:
Код:
	
MyDialog::setWindowFlags(Qt::FramelessWindowHint);

MyDialog::setGeometry(QRect(0, 0, 1024, 768));

QPalette bgPalette = MyDialog::palette();
QBrush bgBrush = QColor(255, 255, 255, 50); //120

bgPalette.setBrush(MyDialog::backgroundRole(), bgBrush);
MyDialog::setAutoFillBackground(true);
MyDialog::setPalette(bgPalette);

QPixmap bgPixmap("dialog.png");
QLabel *bgLabel = new QLabel(this);
bgLabel->setPixmap(bgPixmap);

QPushButton *okButton = new QPushButton(tr("Продолжить"), this);
QPushButton *cancelButton = new QPushButton(tr("Отмена"), this);

okButton->setGeometry(QRect(600, 440, 200, 50));
cancelButton->setGeometry(QRect(360, 440, 200, 50));

connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
Записан
bigirbis
Гость
« Ответ #7 : Сентябрь 07, 2006, 17:35 »

Цитировать
Код:
MyDialog::setGeometry(QRect(0, 0, 1024, 768));

По коду похоже, что шириной в десктоп: QApplication::desktop()->size()

И еще вопрос: у тебя слоты не отрабатывают, или сами баттоны на клик не реагируют?
Записан
enola
Гость
« Ответ #8 : Сентябрь 07, 2006, 17:41 »

нет мне нужно просто такого размера диалог на главной форме.
Записан
bigirbis
Гость
« Ответ #9 : Сентябрь 07, 2006, 18:25 »

Специально созданный тест показал, что если передать флаг Qt::FramelessWindowHint следующим образом, то таких контузий не возникает:
Код:
MessageDialog *message = new MessageDialog( this, Qt::FramelessWindowHint );
либо
Код:
MessageDialog::MessageDialog( QWidget * parent, Qt::WFlags flags )
: QDialog( parent, flags | Qt::FramelessWindowHint )
{
...
}
Записан
alex0303
Гость
« Ответ #10 : Сентябрь 07, 2006, 21:07 »

А
setWindowFlags(getWindowFlags() | Qt::FramelessWindowHint);
не катит?
Записан
bigirbis
Гость
« Ответ #11 : Сентябрь 08, 2006, 08:45 »

To alex0303
Смотри тему внимательнее.

При установке данного влаге методом setWindowFlags() начинается весьма интересная свистопляска, описанная выше.
Записан
enola
Гость
« Ответ #12 : Сентябрь 08, 2006, 08:57 »

bigirbis
Контузий не возникает, но и желаемого результата тоже.
Вот что нужно: есть форма, на ней по клику на кнопке должен появиться прозрачный диалог (во весь размер формы), у меня с выше описанным кодом все получается, только кнопки не нажимаются (именно сами баттоны не реагируют). А если сделать как ты написал, то все работает только диалог не прозрачный и не на форме а отдельно!
Записан
bigirbis
Гость
« Ответ #13 : Сентябрь 08, 2006, 10:17 »

To enola.
То, о чем ты говоришь, жесточайший изврат. Рамку нужно убирать как описано выше (передавая флаги в конструктор виджета). В твоем случае QPainter просто взбесился. А прозрачность надо делать другими средствами - смотри в форуме. Что касаетя выхода за границы виджета - так ты же от диалога наследуешься (тогда переописывай resizeEvent() либо наследуйся от виджета и клади его сверху).
Записан
enola
Гость
« Ответ #14 : Сентябрь 08, 2006, 13:52 »

Ты прав это полный изврат, буду делать от QWidget, спасибо за помошь.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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