[CMake] qt3 simple application question
Clinton Stimpson
clinton at elemtech.com
Mon Sep 1 23:41:26 EDT 2008
kdsfinger at gmail.com wrote:
> hi, there
>
> I need to write an application in qt3 and here is my very beginning:
> just display a mainwindow and nothing else (the mainwindow is produced
> by qt designer windowbase.ui ) I have my own reason to do it in qt3
> not in qt4 (for thumbnail view).
>
> During compiling, I get:
> -----------------------------
> windowbase.h
>
> class WindowBase : public QMainWindow }{...}
> -----------------------------
>
> -----------------------------
> windowbase.cxx
> -----------------------------
>
> I manually create the following files:
> -----------------------------
> window.h
>
> #ifndef WINDOW_H
> #define WINDOW_H
> #include "windowbase.h"
>
> class Window : private WindowBase{
> public: //nothing else
> public slots: //nothing else
> };
>
> #endif
> ---------------------------
>
> ---------------------------
> window.cpp
>
> #include "window.h"
> // nothing else
> ---------------------------
>
> --------------------------
> main.cpp
>
> #ifdef HAVE_CONFIG_H
> #include <config.h>
> #endif
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <qapplication.h>
> #include "window.h"
> #include <qmainwindow.h>
>
> int main(int argc, char *argv[])
> {
> QApplication myApp(argc,argv);
> Window * mypWindow = new Window();
> myApp.setMainWidget(mypWindow); //error here, line 23
> mypWindow->show();
> return myApp.exec();
> return EXIT_SUCCESS;
> }
> -----------------------
>
> The CMakeLists.txt is as following (I highly suspect something wrong
> here, I stitched the script but not sure what I am doing. And I can't
> find any example related to qt3 + cmake + ui anywhere)
> -----------------------------
> PROJECT(study3)
>
> SET(CMAKE_VERBOSE_MAKEFILE ON)
> ADD_DEFINITIONS(-Wall -O2)
>
> FIND_PACKAGE(Qt3 REQUIRED)
> ADD_DEFINITIONS(${QT_DEFINITIONS})
>
> INCLUDE_DIRECTORIES(
> ${CMAKE_BINARY_DIR}
> ${QT_INCLUDE_DIR}
> ${QT_INCLUDE_PATH}
> )
>
> SET(STUDY3_UI_SRC
> windowbase.ui
> )
>
> SET(STUDY3_SOURCES
> window.cpp main.cpp
> )
>
> QT_WRAP_UI(study3 STUDY3_UI_H STUDY3_UI_CPP ${STUDY3_UI_SRC})
> QT_WRAP_CPP(study3 STUDY3_UI_CPP ${STUDY3_UI_H})
>
> # I am not sure where and how or if I need to put "moc" somewhere
>
> INCLUDE_DIRECTORIES(
> ${CMAKE_SOURCE_DIR}
> ${CMAKE_CURRENT_SOURCE_DIR}
> )
>
> ADD_EXECUTABLE(study3
> ${STUDY3_SOURCES}
> ${STUDY3_UI_CPP}
> )
>
> TARGET_LINK_LIBRARIES(study3 ${QT_LIBRARIES} png jpeg)
> ---------------------------
>
> Here is the error message I got during compile:
>
> /study3/main.cpp:23: error: 'QWidget' is an inaccessible base of 'Window'
> /usr/share/qt3/include/qmainwindow.h:98: error: 'virtual void
> QMainWindow::show()' is inaccessible
> /study3/main.cpp:24: error: within this context
> /study3/main.cpp:24: error: 'QMainWindow' is not an accessible base of 'Window'
>
> But, if I change the line 23 into
>
> WindowBase * mypWindow = new WindowBase();
>
> then the program can compile and runs fine.
>
> The Window class inherits from WindowBase and I am suppose to do my
> own stuff there (in current case I do nothing). What's wrong with my
> code? Thanks for your comments.
>
Its because you're doing private inheritance. You probably intend to do
public inheritance.
class Window : public WindowBase{ };
Clint
More information about the CMake
mailing list