//clposter.h
class CLPoster : public QMainWindow
{
Q_OBJECT
public:
CLPoster();
private slots:
QWidget createCentralWidget();
void createActions();
void createMenu();
void createStatusBar();
void loadSavedPosts();
};
//clposter.cpp
CLPoster::CLPoster()
{
setWindowTitle("Craigslist Poster");
QWidget mainWidget = createCentralWidget();
setCentralWidget(mainWidget);
// createActions();
// createMenu();
// createStatusBar();
// loadSavedPosts();
// checkForActionsNeeded(); //May want to break up into more functions
}
我得到的错误是:
/usr/include/qt4/QtGui/qwidget.h ::在构造函数'CLPoster :: CLPoster()'中: /usr/include/qt4/QtGui/qwidget.h:787:错误:'QWidget :: QWidget(const QWidget&)'是私有的 /home/brett/projects/CLPoster/CLPoster-build-desktop/../CLPoster/clposter.cpp:9:错误:在此上下文中 /home/brett/projects/CLPoster/CLPoster-build-desktop/../CLPoster/clposter.cpp:10:错误:没有匹配函数来调用'CLPoster :: setCentralWidget(QWidget&)' /usr/include/qt4/QtGui/qmainwindow.h:141:候选人是:void QMainWindow :: setCentralWidget(QWidget *)
我在解释错误消息时遇到问题。它说没有匹配的函数调用,但它应该从QMainWindow继承它。它可能只是缺乏对Q ++的理解,而不是QT,我第一次使用它,但不知道。谢谢你的帮助。
答案 0 :(得分:1)
setCentralWidget函数希望您向QWidget(QWidget*
)发送指针,而您尝试发送实际对象(或对您的代码中的对象QWidget&
,如编译器错误所暗示的那样)。如果您将中央窗口小部件创建为指针(将成员函数更改为QWidget* createCentralWidget()
)并将指针传递给setCentralWidget函数,那么您应该很高兴。
e.g。
QWidget* CLPoster::createCentralWidget()
{
QWidget* w = new QWidget;
// Do stuff..
return w;
}
然后在你的构造函数中,你可以调用setCentralWidget(createCentralWidget())
。 QMainWindow析构函数将确保删除您的中央窗口小部件。
答案 1 :(得分:1)
所有QWidget项目必须在免费商店(new
)中分配,因为他们都必须拥有“父母”。在Qt中,父级将删除其子级(使用delete
)。这就是为什么任何函数返回,接受,无论小部件将在指向窗口小部件的指针上执行此操作,而不是窗口小部件本身;你需要这样做。
答案 2 :(得分:0)
您是否需要在堆上分配Widget并将指针传递给setCentralWidget()