Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Панель инструментов в прикрепляемом окне

Автор: AD 2.10.2008, 10:53

Непонимаю, что я неточно делаю, что получается вот такая ерунда:
[attachment=263:test_picture.JPG]

Вот код создания панельки инструментов.

ReliefGraphics::ReliefGraphics(QWidget *parent): toolBar(0), settings(0)
{
    toolBar = new QToolBar(this);
    toolBar -> setObjectName(QString::fromUtf8("toolBar"));
    toolBar -> setOrientation(Qt::Vertical);
    toolBar -> setToolButtonStyle(Qt::ToolButtonIconOnly);
    toolBar -> setAllowedAreas(Qt::LeftToolBarArea);

    settings = new PlotSettings();
    addIconToolbar();
}

ReliefGraphics::~ReliefGraphics()
{
    if(toolBar) delete toolBar;
    if(settings) delete settings;
}

/// Добавление иконок в панель инструментов
void ReliefGraphics::addIconToolbar()
{
    QString text = "Save";
    toolBar -> addAction(QIcon("./Images/save.png"), text);

    text = "Repair";
    toolBar -> addAction(QIcon("./Images/repair.png"), text);
}


Ну что я не так-то делаю???

Автор: AD 2.10.2008, 11:44

Ау. Поможете?

Автор: trdm 2.10.2008, 13:22

Может стоит просто откомпоновать тулбар через лайоты?
Сильно подозреваю, что автокрепежка и автовыравнивание тулюаров реализованно только для QMainWindow - подобных окошек, а в остальных лучше компоновкой работать с ними.

Автор: AD 2.10.2008, 15:03

Цитата(trdm @ 2.10.2008, 14:22) *
Может стоит просто откомпоновать тулбар через лайоты?
Сильно подозреваю, что автокрепежка и автовыравнивание тулюаров реализованно только для QMainWindow - подобных окошек, а в остальных лучше компоновкой работать с ними.

Нет, компоновщики тут не помогут. Посоветовали использовать QMainWindow! Так и сделал - возник другой вопрос: как заставить этот внутренний QMainWindow отображаться внутри вложенного в главное окно приложения доквиджета? Сейчас эта QMainWindow отображается как еще одно окно, чего мне совсем не надо.

Вот код:
ReliefGraphics::ReliefGraphics(QWidget *parent): toolBar(0), settings(0)
{
    setupUi(this);

    toolBar = new QToolBar(reliefDisplay);
    toolBar -> setObjectName(QString::fromUtf8("toolBar"));
    toolBar -> setToolButtonStyle(Qt::ToolButtonIconOnly);
    toolBar -> setOrientation(Qt::Vertical);
    toolBar -> setAllowedAreas(Qt::LeftToolBarArea);
    addIconToolbar();
    reliefDisplay -> addToolBar(Qt::LeftToolBarArea, toolBar);
    reliefDisplay -> setVisible(true);
    setWidget(reliefDisplay);

    settings = new PlotSettings();
}

ReliefGraphics::~ReliefGraphics()
{
    if(toolBar) delete toolBar;
    if(settings) delete settings;
}

/// Добавление иконок в панель инструментов
void ReliefGraphics::addIconToolbar()
{
    QString text = "Save";
    QAction* save_action = new QAction(QIcon("./Images/save.png"), text, this);
    text = "Repair";
    QAction* repair_action = new QAction(QIcon("./Images/repair.png"), text, this);

    toolBar -> addAction(save_action);
    toolBar -> addAction(repair_action);
}


class Ui_VerticalGraphicClass
{
public:
    QGridLayout *gridLayout;
    QMainWindow *reliefDisplay;

public:
    void setupUi(QDockWidget *ReliefClass);                    // setupUi
    void retranslateUi(QDockWidget *ReliefClass);            // retranslateUi
};

namespace Ui
{
    class VerticalGraphicClass: public Ui_VerticalGraphicClass {};
} // namespace Ui


Параллельные вопрос: как убрать у этого mainwindow строку заголовка?

Автор: trdm 2.10.2008, 15:22

нарисуй, че убрать хочешь..

Автор: AD 2.10.2008, 15:32

Цитата
нарисуй, че убрать хочешь..

Ta dam

[attachment=264:test_picture1.JPG]

Автор: trdm 2.10.2008, 15:37

короче весь вопрос в том как присобачить тулбар на доковое окошко?

Автор: AD 2.10.2008, 15:40

Цитата(trdm @ 2.10.2008, 16:37) *
короче весь вопрос в том как присобачить тулбар на доковое окошко?

Изначально, да. Теперь видоизменился: как присобачить mainwindow в dockwidget?

Автор: trdm 2.10.2008, 16:12

Как насчет такого подхода? :)

 

Автор: AD 2.10.2008, 16:20

Цитата
Как насчет такого подхода? :)

попробую.

Автор: trdm 2.10.2008, 16:27

блин, меню туда побыстрому присобачить неудалось. а так работает...
проект на всяк присобачиваю..

 dockwidgets.zip ( 14.85 килобайт ) : 99
 

Автор: AD 2.10.2008, 17:07

Цитата(trdm)
блин, меню туда побыстрому присобачить неудалось. а так работает...
проект на всяк присобачиваю..

Благодаря данному примеру у меня получилось сделать и с QMainWindow! :) Большое спасибо! :) Нашел ошибку в своем предыдущем коде, поправил и все заработало. Эврика.
Итак, вывод - проблему можно решить 2 способами, через QFrame с QLayout или через QMainWindow.

Вот правильный код решения данной проблемы
ReliefGraphics::ReliefGraphics(QWidget *parent): toolBar(0), settings(0)
{
    setupUi(this);

    toolBar = new QToolBar(reliefDisplay);
    toolBar -> setObjectName(QString::fromUtf8("toolBar"));
    toolBar -> setToolButtonStyle(Qt::ToolButtonIconOnly);
    toolBar -> setOrientation(Qt::Vertical);
    toolBar -> setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    toolBar -> setVisible(true);
    addIconToolbar();
    reliefDisplay -> addToolBar(Qt::LeftToolBarArea, toolBar);
    setWidget(reliefDisplay);

    settings = new PlotSettings();
}

ReliefGraphics::~ReliefGraphics()
{
    if(toolBar) delete toolBar;
    if(settings) delete settings;
}

/// Добавление иконок в панель инструментов
void ReliefGraphics::addIconToolbar()
{
    QString text = "Save";
    QAction* save_action = new QAction(QIcon("./Images/save.png"), text, reliefDisplay);
    text = "Repair";
    QAction* repair_action = new QAction(QIcon("./Images/repair.png"), text, reliefDisplay);

    toolBar -> addAction(save_action);
    toolBar -> addAction(repair_action);
}


QAction* save_action = new QAction(QIcon("./Images/save.png"), text, reliefDisplay); - вот строка, где кроилась ошибка. До этого у меня последним параметром был this!!!

Автор: Litkevich Yuriy 2.10.2008, 17:49

Цитата(trdm @ 2.10.2008, 20:27) *
проект на всяк присобачиваю..
как-то не звучит это слово, лучше: прикладываю

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)