2015-09-10 58 views
1

我学习Qt和在书中“的Qt开发的基础”尝试一些例子。 在书中,有一示例创建一个简单的应用程序象一个记事本教单文档界面的截面。 但是我有工具栏创建问题。Qt的C++创建工具栏

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");  
} 

它是主窗口的构造函数。

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

这就是本书如何创建工具栏。 然而,当我尝试运行程序,还有创建了两个工具栏。 一个是由代码创建名为工具栏中的“文件” 另一种是由UI设计师即创建一个空白的工具栏。 *ui.toolbar

为了摆脱两个工具栏的,我试过只用*ui.toolbar。 它正在工作。代码如下所示。

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

但我试图通过代码创建工具栏,即。不在UI设计器中添加工具栏。 所以我写这篇文章:

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

然而,有一个编译错误。 编译器使用此功能:

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

,而不是我想要的东西:

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

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

什么是我的错吗?

+1

什么是编译错误消息? –

+0

@MikhailZimka错误:C2027:使用未定义的类型'QToolBar';错误:C2227:' - > addAction'的左侧必须指向class/struct/union /泛型类型。应该是由于'addToolBar(const QString&)'不返回'QToolBar *' – tom

+1

这很奇怪,但你可以尝试明确#include 到你的源文件 –

回答

2

当您从MainWindow中删除QToolBar QtCreator会自动删除导入QToolBar类。

只需添加这的mainwindow.h顶部:

#include <QToolBar> 

而且最好是在MainWindowprivatemainwindow.h定义QToolBar* FileBar。然后您将可以通过MainWindow类的任何方法访问它。

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

当你看到这样的消息:

所有的

must point to class/struct/union/generic type

首先尝试包括必要的类头。

+0

QtCreator是一个IDE。它不会做那样的事情。你正在谈论* uic * - 它需要'.ui'文件并生成'ui_MainWindow.h'。 –