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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Модальное окно без поведения Sheet  (Прочитано 5158 раз)
Wicked_Digger
Гость
« : Сентябрь 18, 2009, 19:38 »

Возможно ли сделать дочернее окно с модальностью WindowModal, но так, чтобы оно вело себя не как Sheet.
Для меня это удар в спину, что даже QWidget типа Qt::Window, если его сделать модальным, ведет себя и выглядит как Sheet.
Я прекрасно отдаю себе отчет в том, что это идет в разрез с Mac gidelines, но так надо, приложение скинованое. Скинованые диалоги вылизающие из воздуха это ужасно!
Записан
Wicked_Digger
Гость
« Ответ #1 : Сентябрь 21, 2009, 12:37 »

Зачем эту тему перенесли из раздела MacOS? Я уверен, что никто кроме разработчиков под Mac не имеет понятия, что такое Sheet. Теперь эта тема благополучно умрет, обидно Грустный
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 21, 2009, 12:41 »

Зачем эту тему перенесли из раздела MacOS? Я уверен, что никто кроме разработчиков под Mac не имеет понятия, что такое Sheet. Теперь эта тема благополучно умрет, обидно Грустный
Ладно, не дадим умереть Улыбающийся Я сделал аж 2(!) модальных диалога под Qt (OSX) - и проблем не имею. Выложите пожалуйста примерчик.
Записан
Wicked_Digger
Гость
« Ответ #3 : Сентябрь 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. Цель - добиться появления окна с заголовком.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 21, 2009, 16:39 »

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

pDialog->setModal(true);
pDialog->show();
Записан
Wicked_Digger
Гость
« Ответ #5 : Сентябрь 21, 2009, 16:57 »

Это будет ApplicationModal, а надо WindowModal, было бы все так просто вопрос бы не возник Грустный
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Сентябрь 21, 2009, 18:44 »

Это будет ApplicationModal, а надо WindowModal, было бы все так просто вопрос бы не возник Грустный
Тогда я способа не вижу. Если затребована WindowModal, нативный класс определяется как kSheetWindowClass (со всеми вытекающими). Если уж без title "никак нельзя"(не знаю почему), то предлагаю такой обходной путь:

- создаете просто немодальный child
- говорите parent'у  setDisabled(true);
Записан
SABROG
Гость
« Ответ #7 : Сентябрь 22, 2009, 16:00 »

В QQ вроде бы освещалась эта тема http://doc.trolltech.com/qq/QtQuarterly30.pdf
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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