1

私は C++ の初心者で、MVS IDE のコードを通じて QT コンポーネントの使用方法を学び始めました。それが最初の選択肢として最適だったかどうかはまだわかりませんが、私は Java プログラマーなので、Java (Swing コンポーネント) で作成したパスを作成しました。だから、私の問題は、私のコードの2つのクラスを通信する方法です.1つはウィンドウフレームを作成し、もう1つはメニューバーを作成しましたか?

Java では、次のようなものを作成します。

JFrame frame = new JFrame();
JMenu menu = new JMenu();

frame.add(menu);

とにかく、これは私のコードです:

#include "Header.h"

class MainWindow{

    private:

        QWidget *widget;

    public:

        void buildWindow(QApplication& app){

            widget = app.desktop();
            QMainWindow *main_window = new QMainWindow();
            QWidget *mainWid = new QWidget(main_window);
            MyMenuBar myMenuBar(mainWid);
            main_window->setWindowState(mainWid->windowState() | Qt::WindowMaximized);
            main_window->setWindowTitle("QT Trainning");
            main_window->show();            
        }

};

class MyMenuBar:QMainWindow {

    public:

    MyMenuBar(QWidget* mainWid){

         QAction *quit = new QAction("&Quit", this);

         QMenuBar *menu = new QMenuBar(mainWid);
         QMenu *file;

         menu->addMenu(file);
          file = menuBar()->addMenu("&File");
            file->addAction(quit);

          connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    }

};

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);

   MainWindow frame;

   frame.buildWindow(app);

   return app.exec();
}

Window クラス内に MenuBar のインスタンスを作成しようとしましたが、あまり役に立ちませんでした。正直に言うと、QT インターフェイスを扱うために見つけた資料のほとんどは、QT GUI を使用していると思われます...方法に関するヒント問題を解決するか、C++ を練習するために実際に何をすべきか??

前もって感謝します

4

2 に答える 2

3

継承にはアクセス指定子を指定する必要があります。それ以外の場合、デフォルト モードは public です。

また、すべてのクラスを同じファイルに入れる場合は、順序が重要です (私はそう思います)。あなたの場合、 MyMenuBar は MainWindow の前に来るべきです。そのため、異なるヘッダーに異なるコンポーネントを配置し、必要に応じてそれらを含めることをお勧めします。

2 つのクラスを別々に必要とする場合のコードを次に示します。

class TrainingMenu:public QMainWindow {

public:

        TrainingMenu(QMenuBar *menubar){
            QAction *quit = new QAction("&Quit", menubar);

            QMenu *file;

            file = menubar->addMenu("&File");
            file->addAction(quit);

            connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
        }

};

class MainWindows:public QMainWindow{

private:
    TrainingMenu* _menu;
public:
    MainWindows(QMainWindow *parent = 0):QMainWindow(parent) {
        _menu=new TrainingMenu(MainWindows::menuBar()); 
        this->setWindowTitle("Qt training");
        this->setWindowState(Qt::WindowMaximized);
        this->show();
    }

};



int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   MainWindows window;

   return app.exec();
}
于 2013-10-03T13:09:48.540 に答える
2

この例で十分です。次のことを行います。

  • QMenu最上位のウィジェットを親として を作成します
  • サブメニューQMenuインスタンスをルート レベル メニューに追加する
于 2013-10-02T18:18:33.127 に答える