c++ - 不明白为什么我不能在 QMainWindow 子类中调用 setCentralWidget

标签 c++ qt qt4

//clposter.h
class CLPoster : public QMainWindow
{
    Q_OBJECT<p></p>

<p>public:
    CLPoster();</p>

<p>private slots:
    QWidget createCentralWidget();
    void createActions();
    void createMenu();
    void createStatusBar();
    void loadSavedPosts();
};
</p>

//clposter.cpp
CLPoster::CLPoster()
{
    setWindowTitle("Craigslist Poster");<p></p>

<pre><code>QWidget mainWidget = createCentralWidget();
setCentralWidget(mainWidget);
</code></pre>

<p>//    createActions();
//    createMenu();
//    createStatusBar();</p>

<p>//    loadSavedPosts();
//    checkForActionsNeeded();    //May want to break up into more functions
}
</p>

我得到的错误是这样的:

/usr/include/qt4/QtGui/qwidget.h:: In constructor ‘CLPoster::CLPoster()’: /usr/include/qt4/QtGui/qwidget.h:787: error: ‘QWidget::QWidget(const QWidget&)’ is private /home/brett/projects/CLPoster/CLPoster-build-desktop/../CLPoster/clposter.cpp:9: error: within this context /home/brett/projects/CLPoster/CLPoster-build-desktop/../CLPoster/clposter.cpp:10: error: no matching function for call to ‘CLPoster::setCentralWidget(QWidget&)’ /usr/include/qt4/QtGui/qmainwindow.h:141: candidates are: void QMainWindow::setCentralWidget(QWidget*)

我无法解释错误消息。它说没有匹配的函数调用,但它应该是从 QMainWindow 继承的。它可能只是缺乏对 C++ 的理解,而不是 QT,我第一次使用它,但不知道。感谢您的帮助。

最佳答案

所有 QWidget 项都必须在自由存储区 (new) 中分配,因为它们都必须有“父项”。在 Qt 中,父项将删除其子项(使用 delete)。这就是为什么任何函数返回、接受,无论小部件将要做什么,都是在指向小部件的指针上进行的,而不是小部件本身;你需要做同样的事情。

关于c++ - 不明白为什么我不能在 QMainWindow 子类中调用 setCentralWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948556/

相关文章:

C++ 项目作为静态库编译,作为动态库失败(链接器错误)。为什么?

qt - PropertyAction 不适用于 "AnchorChanges"元素

c++ - 使用 QSocketNotifier 在字符设备上进行选择。

c++ - 我是否应该将所有数据类实现为 QSharedData 并将其与 QSharedDataPointer 一起使用?

c++ - QNetworkAccessManager 和 authenticationRequired

c++ - "undefined reference to"当我试图继承 vector 类时

c++ - QJsonObject 返回 null

qt - 整合QT和OpenCV?

c++ - Qt - QLabel 不会以固定比例调整大小

c++ - vector如何将数据复制到另一个vector?