2012-03-21 21 views
4

メインアプリケーションウィンドウを作成しようとしています。メニューバーがあり、その下にスプリッター付きのラベルが1つ表示されています。メインウィンドウのコードは以下の通りです。Qtウィジェットがメインウィンドウに表示されない

メニューバーには表示されているが、ラベルとスプリッターでは表示されないという問題があります。これまでに試したこと: 1.スプリッタの親を "this" - > splitter showに設定しますが、メニューバーの上に描画され、小さいです。 2.ラベルの親を "this" - > labelに設定しますが、メニューバーに描画されます。 3.スプリッタ、親、ラベル - >ラベルが表示されないため、親を "this"に設定してください。メニューバーの下に描かれたスリッパのミニチュア版が表示されます。 4.コードラインの再整理を試み、メニューバーの上に描画された大きなスプリッタ、メニューバーの下にある小さなスプリッタ、メニューバーだけなど、何も役立たないなど、さまざまな結果が得られました。

縦型レイアウトのように見えますが、完全に無視されます。

他に何を試してもわかりません。助言がありますか?

MyWindow::MyWindow(IViewSignalHandler* signalHandler, QWidget *parent, Qt::WFlags flags) 
    : QMainWindow(parent, flags) 
{ 
    m_signalHandler = signalHandler; 

    // menu 
    m_fileMenu = new QMenu(tr("&File")); 
    m_fileMenu->addAction(tr("&Open"), this, SLOT(slot_OpenFile(bool))); 

    m_helpMenu = new QMenu(tr("&Help")); 
    m_helpMenu->addAction(tr("&About"), this, SLOT(slot_ShowAboutBox(bool))); 

    menuBar()->addMenu(m_fileMenu); 
    menuBar()->addMenu(m_helpMenu); 

    // graph 
    m_graphWidget = new QwtPlot(); 
    m_graphLegend = new QwtLegend(); 
    m_graphLegend->setItemMode(QwtLegend::CheckableItem); 
    m_graphWidget->insertLegend(m_graphLegend, QwtPlot::RightLegend); 
    m_graphWidget->setAxisTitle(QwtPlot::xBottom, tr("X")); 
    m_graphWidget->setAxisScale(QwtPlot::xBottom, DEFAULT_X_MIN, DEFAULT_X_MAX); 
    m_graphWidget->setAxisTitle(QwtPlot::yLeft, tr("Y")); 
    m_graphWidget->setAxisScale(QwtPlot::yLeft, DEFAULT_Y_MIN, DEFAULT_Y_MAX); 

    QwtPlotZoomer* zoomer = new QwtPlotZoomer(m_graphWidget->canvas()); 
    zoomer->setTrackerMode(QwtPlotZoomer::AlwaysOn); 
    zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier); 
    zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton); 

    // path label 
    m_label= new QLabel(); 
    m_label->setTextFormat(Qt::RichText); 
    m_label->setWordWrap(false); 
    m_label->setText(tr("<b>Label: </b>")); 

    // splitter 
    m_splitter = new QSplitter(); 
    m_splitter->setChildrenCollapsible(true); 
    m_list = new QListWidget(); 
    m_splitter->addWidget(m_list); 
    m_tree = new QTreeWidget(); 
    m_splitter->addWidget(m_tree); 
    m_text = new QTextEdit(); 
    m_splitter->addWidget(m_text); 
    m_splitter->addWidget(m_graphWidget); 

    // page layout 
    QVBoxLayout *pageLayout = new QVBoxLayout(this); 
    pageLayout->addWidget(m_label); 
    pageLayout->addWidget(m_splitter); 
    setLayout(pageLayout); 
} 

[...]

m_mainWindow = new MyWindow(this); 
m_mainWindow->show(); 

答えて

1

あなたがsetCentralWidget()を呼び出すことによって、中央ウィジェットを設定する必要があります。

EDIT:QWidgetをメインウィジェットに追加し、セントラルウィジェットとして設定し、レイアウトを作成して中央のウィジェットに追加します。

MyWindow::MyWindow(IViewSignalHandler* signalHandler, QWidget *parent, Qt::WFlags flags) 
: QMainWindow(parent, flags) 
{ 
    QWidget *ui_area = new QWidget; 
    setCentralWidget(ui_area); 

    //.....create your_layout..... 

ui_area->setLayout(your_layout); 

} 
+0

私は様々な組み合わせでそれを試しましたが、クッキーはありませんでした。例えば、上記のコンストラクタの最後の行として 'this-> setCentralWidget(pageLayout-> widget());'を追加すると、メニューバーの上にミニスプリッタが描画されます。 –

+0

'this-> setCentralWidget(m_splitter);'を試してみるともっと良く見えます。 ' - 次に、ウィンドウのサイズを変更する大きなスプリッタを持つ素敵なメニューバーを取得します。ただし、この方法ではメニューの間にあるはずのラベルを使用しますバーとスプリッター(理由は私がそこに垂直レイアウトを持っている理由)。 –

+0

'QMainWindow'から' QDialog'に切り替えると、すべて正常に動作します。 –

1

まったく同じ問題がありました。私は何が原因であるのか分からないが、QMainWindowの代わりにQWidgetを継承しているようだ。

+0

qmainwindowはcentralWidgetを設定する必要があります。それ以外の場合は何も表示されません。 http://qt-project.org/doc/qt-4.8/qmainwindow.html#setCentralWidget –

+0

QWidgetで継承すると、それは私のためになりました。ありがとう。 –

関連する問題