Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Список окон QWorkSpace


Автор: loneybibi 20.2.2011, 18:39
Вопрос в следующем. Есть Workspace и Combobox. Как можно получить список окон рабочей области в Combobox и переключать окна с помощью Combobox? Какие другие варианты возможны ? Спасибо. 

Автор: loneybibi 21.2.2011, 00:02
Повторюсь. На форме есть WorkSpace, в контекстом меню главного окна есть меню которое управляет дочерними окнами (каскадом, разложить и т.д.) в него по добавляется список окон как и в ComboBox на ToolBar панели. Задача в том что бы переключать активные окна и с помощью меню и ComboBox тоже.
Вообщем сам вроде как разобрался. Создал функцию создания меню "Окна" как основную и функцию updateWindows которая исполняет все остальное. Функция срабатывает при закрытии или открытии дочернего окна. Проблема в том что компилятор ругается на функцию которую я назначаю в слот для созданного нового пункта меню "окна":
Object::connect: No such slot MainWindow::wActivateWindow(id) in mainwindow.cpp:267
Object::connect:  (receiver name: 'MainWindow')

Что не так делаю ? Где затупил ?  smile 

Код

//------функция обновления меню ОКНА-------
void MainWindow::wMenuUpdate()
{
    ui->menuWindow->clear();

    QAction *Cascade=new QAction(this);
    Cascade->setText("Cascade");
    ui->menuWindow->addAction(Cascade);
    connect(Cascade, SIGNAL(triggered()), this, SLOT(wCascade()));

    QAction *Tile=new QAction(this);
    Tile->setText("Tile");
    ui->menuWindow->addAction(Tile);
    connect(Tile, SIGNAL(triggered()), this, SLOT(wTile()));

    ui->menuWindow->addSeparator();

    QAction *CloseActive=new QAction(this);
    CloseActive->setText("Close active");
    ui->menuWindow->addAction(CloseActive);
    connect(CloseActive, SIGNAL(triggered()), this, SLOT(wCloseActive()));

    QAction *CloseAll=new QAction(this);
    CloseAll->setText("Close all");
    ui->menuWindow->addAction(CloseAll);
    connect(CloseAll, SIGNAL(triggered()), this, SLOT(wCloseAll()));

    ui->menuWindow->addSeparator();

    QAction *Next=new QAction(this);
    Next->setText("Next");
    ui->menuWindow->addAction(Next);
    connect(Next, SIGNAL(triggered()), this, SLOT(wNext()));

    QAction *Previous=new QAction(this);
    Previous->setText("Previous");
    ui->menuWindow->addAction(Previous);
    connect(Previous, SIGNAL(triggered()), this, SLOT(wPrevious()));

}



Код

//--------функция выбора окна автивным
void MainWindow::wActivateWindow(int wIndex)
{
      QWidget *wWidget = windowsList->at(wIndex);
      wWidget->show();
      wWidget->setFocus();
}


Код

//-----основная функция выполняющая другие функции---
void MainWindow::updateWindows()
{
    wMenuUpdate();

    windowsList=new QWidgetList;
    *windowsList=WorkSpace->windowList();

    if (windowsList->size()>0){
            wComboList->setEnabled(true);
            wComboList->clear();

            ui->menuWindow->addSeparator();

            for(int i=0; i<windowsList->size();++i){
                wComboList->addItem("window");

                QAction *wMenuAction=new QAction(this);
                wMenuAction->setText("window");
                ui->menuWindow->addAction(wMenuAction);
                //-----тут выдает ошибку
                int id=i;
                connect(wMenuAction,SIGNAL(triggered()),this,SLOT(wActivateWindow(id)));

                }
        }
            else
                {
                    wComboList->setEnabled(false);
                    wComboList->clear();
                    wComboList->addItem("[нет открытых окон]");
                }

}

Автор: loneybibi 24.2.2011, 19:45
Все разобрался сам. В книге по Qt4 использовался QWorkSpace, а оказывается это элемент 3 версии и он устарел. Сделал все на QMdiArea нашел нормальную книгу. По примерам все получилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)