我的Qt程序显示带标题的空白窗口

时间:2017-03-12 23:35:02

标签: c++ qt qt5 qt-creator

我是Qt的新手,我有这个代码,它应该在Qt主窗口中显示一个滑动条和数字框。但我所得到的只是主窗口本身而已。我确实使用了show()函数,但没有发生任何事情

#include "mainwindow.h"
#include <QApplication>
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>
#include <QtGui/QApplicationStateChangeEvent>



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

    program.setWindowTitle("Title of window");


    QSpinBox *spinboxx = new QSpinBox();
    QSlider *slider = new QSlider(Qt::Horizontal);
    spinboxx->setRange(1,40);
    slider->setRange(1,40);

QObject::connect(spinboxx, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)), spinboxx, SLOT(setValue(int)));
QHBoxLayout *layout = new QHBoxLayout;

layout->addWidget(slider);
layout->addWidget(spinboxx);
program.setLayout(layout);
    program.show();

    return app.exec();
}

1 个答案:

答案 0 :(得分:2)

编译代码时有一个重要警告:

  

QWidget :: setLayout:试图在QMainWindow上设置QLayout“”,   已经有布局

实际上,您无法为QMainWindow设置布局,因为它有自己的布局。来自Documentation of Qt5

  

主窗口提供了构建应用程序用户的框架   接口。 Qt有QMainWindow及其主窗口的相关类   管理。 QMainWindow有自己的布局,您可以添加   QToolBars,QDockWidgets,QMenuBar和QStatusBar。布局有   一个中心区域,可以被任何类型的小部件占用。

您应该将小部件分配给QMainWindow 程序,而不是这样:

QWidget *window = new QWidget;
QSpinBox *spinboxx = new QSpinBox();
QSlider *slider = new QSlider(Qt::Horizontal);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(slider);
layout->addWidget(spinboxx);

window->setLayout(layout);


QMainWindow program ;
program.setWindowTitle("Title of window");
program.setCentralWidget(window);
program.show();

PS:我保留了您选择的名称惯例,以使更改更加清晰。我宁愿使用小部件而不是窗口窗口而不是程序