我正在学习Qt,并在“Qt开发的基础”一书中尝试了一些例子。 在本书中,有一节教授单文档界面,其中一个示例创建了一个简单的应用程序,如记事本。 但是我的工具栏创建有问题。
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
我的错误是什么?
答案 0 :(得分:2)
从QToolBar
移除MainWindow
时,QtCreator会自动删除QToolBar
类的导入。
只需将其添加到mainwindow.h
的顶部:
#include <QToolBar>
最好在QToolBar* FileBar
private
的{{1}}部分中定义MainWindow
。然后,您将能够从mainwindow.h
类的任何方法访问它。
MainWindow
当你看到这样的消息时:
必须指向class / struct / union / generic类型
首先尝试为必要的类添加标题。