Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Wicked_Digger от Сентябрь 18, 2009, 19:38



Название: Модальное окно без поведения Sheet
Отправлено: Wicked_Digger от Сентябрь 18, 2009, 19:38
Возможно ли сделать дочернее окно с модальностью WindowModal, но так, чтобы оно вело себя не как Sheet.
Для меня это удар в спину, что даже QWidget типа Qt::Window, если его сделать модальным, ведет себя и выглядит как Sheet.
Я прекрасно отдаю себе отчет в том, что это идет в разрез с Mac gidelines, но так надо, приложение скинованое. Скинованые диалоги вылизающие из воздуха это ужасно!


Название: Re: Модальное окно без поведения Sheet
Отправлено: Wicked_Digger от Сентябрь 21, 2009, 12:37
Зачем эту тему перенесли из раздела MacOS? Я уверен, что никто кроме разработчиков под Mac не имеет понятия, что такое Sheet. Теперь эта тема благополучно умрет, обидно :(


Название: Re: Модальное окно без поведения Sheet
Отправлено: Igors от Сентябрь 21, 2009, 12:41
Зачем эту тему перенесли из раздела MacOS? Я уверен, что никто кроме разработчиков под Mac не имеет понятия, что такое Sheet. Теперь эта тема благополучно умрет, обидно :(
Ладно, не дадим умереть :) Я сделал аж 2(!) модальных диалога под Qt (OSX) - и проблем не имею. Выложите пожалуйста примерчик.


Название: Re: Модальное окно без поведения Sheet
Отправлено: Wicked_Digger от Сентябрь 21, 2009, 12:58
Вот как-то так...

Код:
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QDialog>
#include <QtGui/QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow()
    {
        QPushButton *button = new QPushButton( "Show dialog", this );
        connect( button, SIGNAL(clicked()), SLOT(onShowDialog()) );
    }

protected slots:
    void MainWindow::onShowDialog()
    {
        QDialog *pDialog = new QDialog( this );
        pDialog->setWindowModality( Qt::WindowModal );
        pDialog->show();
        pDialog->activateWindow();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

По нажатию на кнопку выезжает Sheet. Цель - добиться появления окна с заголовком.


Название: Re: Модальное окно без поведения Sheet
Отправлено: Igors от Сентябрь 21, 2009, 16:39
По нажатию на кнопку выезжает Sheet. Цель - добиться появления окна с заголовком.
Вместо  pDialog->setWindowModality( Qt::WindowModal ); использовать просто pDialog->exec(). А если управление не хотите отдавать, то

pDialog->setModal(true);
pDialog->show();


Название: Re: Модальное окно без поведения Sheet
Отправлено: Wicked_Digger от Сентябрь 21, 2009, 16:57
Это будет ApplicationModal, а надо WindowModal, было бы все так просто вопрос бы не возник :(


Название: Re: Модальное окно без поведения Sheet
Отправлено: Igors от Сентябрь 21, 2009, 18:44
Это будет ApplicationModal, а надо WindowModal, было бы все так просто вопрос бы не возник :(
Тогда я способа не вижу. Если затребована WindowModal, нативный класс определяется как kSheetWindowClass (со всеми вытекающими). Если уж без title "никак нельзя"(не знаю почему), то предлагаю такой обходной путь:

- создаете просто немодальный child
- говорите parent'у  setDisabled(true);


Название: Re: Модальное окно без поведения Sheet
Отправлено: SABROG от Сентябрь 22, 2009, 16:00
В QQ вроде бы освещалась эта тема http://doc.trolltech.com/qq/QtQuarterly30.pdf