如果我不想使用QMainWindow的布局,我应该使用什么而不是QMainWindow? QMainWindow应该在哪里?

时间:2017-05-29 05:19:48

标签: c++ qt qmainwindow

https://stackoverflow.com/a/13661255/462608

  

QMainWindow有自己的布局,你无法直接设置。   您可能应该在中央窗口小部件上设置布局,或者如果您不想要它的布局/功能,可能根本不使用QMainWindow。

我有自己的一组按钮和其他我想在网格中排列的东西 我是否应该将我的小部件添加到QMainWindow的默认布局?

如果我不想使用QMainWindow的布局,我应该使用什么而不是QMainWindow? QMainWindow应该在哪里?

1 个答案:

答案 0 :(得分:2)

来自docs

  

QMainWindow有自己的布局,您可以在其中添加QToolBars,QDockWidgets,QMenuBar和QStatusBar。布局的中心区域可以被任何类型的小部件占用。您可以在下面看到布局的图像。

     

QMainWindow layout

如果我不想使用QMainWindow的布局,我应该使用什么而不是QMainWindow? QMainWindow应该在哪里?

因此,如果您对QToolBarQDockWidgetQMenuBarQStatusBar感兴趣,则应使用QMainWindow。否则,您可以使用普通QWidget

我是否应该将我的小部件添加到QMainWindow的默认布局?

不,您无法访问QMainWindow的布局。您应该在布局中包含QWidget包含所有小部件(例如按钮),然后将该小部件用作QMainWindow的中央小部件,例如:

#include <QtWidgets>

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

    QMainWindow mainWindow;
    QWidget centralWidget; //this is the widget where you put your buttons
    QGridLayout centralLayout(&centralWidget); //sets layout for the widget
    //add buttons
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            centralLayout
                    .addWidget(new QPushButton(
                                   QStringLiteral("(%0, %1)")
                                   .arg(i).arg(j)),
                               i, j);

    //use your widget inside the main window
    mainWindow.setCentralWidget(&centralWidget);
    //main window can have a toolbar too
    QToolBar* myToolBar = mainWindow.addToolBar("myToolBar");
    myToolBar->addAction("myToolBar action");
    //show mainwindow
    mainWindow.show();

    return a.exec();
}