crossplatform.ru

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


  Ответ в Создание и добавление окон в QMdiArea
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
wiz29 Дата 2.11.2010, 14:55
  ну тогда делай application modal диалог и все, пока из него не вйдешь ничего сделать нельзя будет
bynet Дата 2.11.2010, 14:47
  в конечном итоге мне нужно получить
Прикрепленное изображение


Цитата(Litkevich Yuriy @ 2.11.2010, 15:40) *
оно должно быть модальным (не пускать в родителя)?


да мне хоть как для начала
wiz29 Дата 2.11.2010, 14:42
  тебе тогда нужно переделывать логику виджетов
испусти некий сигнал от ClientWindow, который перехватит MainWindow и создаст дочернее окно, например.
Litkevich Yuriy Дата 2.11.2010, 14:40
 
Цитата(bynet @ 2.11.2010, 18:26) *
а уже по надатии кнопки в clientwindow должно поверх появлятся окно.
оно должно быть модальным (не пускать в родителя)?
bynet Дата 2.11.2010, 14:35
  поидее да :mellow:
wiz29 Дата 2.11.2010, 14:31
  ну по твоей логике для ClientWindow создается дочернее окно при активации некоторого экшна, соответсвенно, при сворачивании родительского окна, сворачиваются все дочерние окна. (я правильно понял логику приложения?)
bynet Дата 2.11.2010, 14:26
  ClientWindow унаследован от QMainWindow. У него есть тул бар. по нажатие по которому должно поверх отображаться окно не навесь экран, чтобы я мог вносить данные

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

ClientWindow::ClientWindow()
{


    db = QSqlDatabase::addDatabase("QIBASE");
    db.setHostName("localhost");
    db.setDatabaseName("D:\\Data\\data.fdb");
    db.setUserName("sysdba");
    db.setPassword("masterkey");
    db.open();
    model = new QSqlTableModel();
    model->setTable("contragent");
    model->select();

    model->setHeaderData(0, Qt::Horizontal, trUtf8("№"));
    model->setHeaderData(1, Qt::Horizontal, trUtf8("Название"));
    model->setHeaderData(2, Qt::Horizontal, trUtf8("Адрес"));
    model->setHeaderData(3, Qt::Horizontal, trUtf8("УНН"));
    model->setHeaderData(4, Qt::Horizontal, trUtf8("Счет"));
    model->setHeaderData(5, Qt::Horizontal, trUtf8("Банк"));
    model->setHeaderData(6, Qt::Horizontal, trUtf8("МФО"));
    model->setHeaderData(7, Qt::Horizontal, trUtf8("ОКПО"));

    view = new QTableView();
    view->setModel(model);

    view->setSelectionBehavior(QAbstractItemView::SelectRows);
    view->horizontalHeader()->setResizeMode(QHeaderView::Stretch);


    setCentralWidget(view);


    createActions();
    createToolBars();





}

ClientWindow::~ClientWindow()
{

    db.close();

}

void ClientWindow::createActions()
{
    add = new QAction(QIcon("/images/client_add.png"),trUtf8("Добавить"),this);
    connect(add,SIGNAL(triggered()),this,SLOT(addAct()));

    del = new QAction(QIcon("/images/client_del.png"),trUtf8("Удалить"),this);
    connect(del,SIGNAL(triggered()),this,SLOT(delAct()));

    edit = new QAction(QIcon("/images/client_edit.png"),trUtf8("Добавить"),this);
    connect(edit,SIGNAL(triggered()),this,SLOT(editAct()));

    find = new QAction(QIcon("/images/client_find.png"),trUtf8("Удалить"),this);
    connect(find,SIGNAL(triggered()),this,SLOT(findAct()));
}

void ClientWindow::createToolBars()
{
    reActions = addToolBar(trUtf8("Действия"));
    reActions->addAction(add);
    reActions->addAction(del);
    reActions->addAction(edit);
    reActions->addAction(find);
}


И в главном окне MainWindow я устанавливаю в центральный виджет mdiarea. И потом туда понажатию кнопки запихиваю ClientWindoW, а уже по надатии кнопки в clientwindow должно поверх появлятся окно. Может у меня подход неправильный?
Litkevich Yuriy Дата 2.11.2010, 14:25
 
Цитата(wiz29 @ 2.11.2010, 18:15) *
Как сделать чтобы qwidget был размером 200 на 200(некакие ресайзыне не помагают), а clientwindow был развернут максимально?
особенность для МДИ - ресайзить нужно не виджет, а субокно (mdisubwindow), меня это тоже напрягает, не логично.

Цитата(bynet @ 2.11.2010, 18:10) *
mdiArea->addSubWindow(wgt);
wgt->show();
это тоже не верно, нужно командовать для субокна
wiz29 Дата 2.11.2010, 14:15
  попробуй добавлять виджеты, аналогично моему примеру, должно нормально работать

так в твоем ClientWindow логика какая, он равноправный виджет в MDI area по отношению к тому виджету, который создается по кнопке или нет?
bynet Дата 2.11.2010, 14:10
 
Цитата(wiz29 @ 2.11.2010, 14:49) *
у окна которое добавляется "поверх", "кто парент виджет"?


QWidget *wgt = new QWidget();
mdiArea->addSubWindow(wgt);
wgt->show();

Вот это окно добавляется поверх

Переделал так
subWindow = new QMdiSubWindow();
QWidget *wgt = new QWidget(mdiArea);
subWindow->setWidget(wgt);
subWindow->setAttribute(Qt::WA_DeleteOnClose);
mdiArea->addSubWindow(subWindow);
subWindow->show();

всеровно при сворачивании или ресайзе происходит для двух окон.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 12:07