tom
tom

Reputation: 1344

Qt C++ Creating toolbar

I am learning Qt and trying some examples in the book "Foundations of Qt Development". In the book, there is a section teaching Single Document Interface with an example creating a simple app like a notepad. However I am having problem with toolbar creating.

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_DeleteOnClose);
    setWindowTitle(QString("%1[*] - %2").arg("unnamed").arg("SDI"));

    connect(ui->docWidget->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool)));

    createActions();
    createMenu();
    createToolbars();

    statusBar()->showMessage("Done");    
}

It is the constructor of the main window.

void MainWindow::createToolbars()
{
    QToolBar* toolbar;
    toolbar = addToolBar(tr("File"));
    toolbar->addAction(anyaction);
}

This is how the book create the toolbar. However, when I try to run the program, there are two toolbars created. One is the toolbar created by the code and called "File" Another is a blank toolbar created by the ui designer ie. *ui.toolbar.

In order to get rid of two toolbars, I tried using only the *ui.toolbar. It's working. The code is shown below.

void MainWindow::createToolbars()
{
    ui->toolBar->addAction(anyaction);
}

But I tried to create the toolbar by code only, ie. not adding a toolbar in the ui designer. So I write this:

void MainWindow::createToolbars()
{
    QToolBar* FileBar = this->addToolBar(tr("File"));
    FileBar->addAction(anyaction);
}

However, there is a compile error. The compiler use this function:

void QMainWindow::addToolBar(QT::ToolBarArea area, QToolBar * toolbar)

instead of what I want:

QToolBar * QMainWindow::addToolBar(const QString & title)

http://doc.qt.io/qt-5/qmainwindow.html#addToolBar-3

What is my mistake here?

Upvotes: 2

Views: 7938

Answers (1)

Alexander Sorokin
Alexander Sorokin

Reputation: 741

When you removed QToolBar from MainWindow QtCreator automatically removed import of QToolBar class.

Just add this to the top of mainwindow.h:

#include <QToolBar>

And it is better to define QToolBar* FileBar in private section of MainWindow in mainwindow.h. Then you will be able to access it from any method of MainWindow class.

void MainWindow::createToolbars()
{
    FileBar = this->addToolBar(tr("File"));
    FileBar->addAction(anyaction);
}

When you see such message:

must point to class/struct/union/generic type

First of all try to include headers for necessary class.

Upvotes: 3

Related Questions