2

我只是盯着 Qt,所以希望是一个菜鸟问题。在 Qt Creator 2.7.2、Qt 5、标准桌面应用程序中工作。

目前我的应用程序是一个窗口,主窗口完全由控制台对象占据,只是一个纯文本编辑,如下所示:

setCentralWidget(console);

这当然占据了整个窗口。所以我使用 UI 编辑器 frame_2 添加了一个框架。如何让控制台出现在框架内,而不是占据整个窗口?

4

1 回答 1

2

http://qt-project.org/doc/qt-4.8/designer-layouts.html

http://qt-project.org/doc/qt-4.8/layout.html

您的中央小部件只是QWidget,然后它需要一个布局。您将布局拖入其中,Qt Designer 顶部有一些按钮用于打开和关闭布局。

setupUi被调用时,它已经setCentralWidget为你调用了。如果您自己调用它,您将失去使用 Qt Designer 所获得的一切。

ui->setupUi(this);

如果您使用的是 Qt Designer,则不应编辑任何生成的文件。如果您再次编辑 .ui 文件,它可能会再次为您生成 ui_.h 文件并修复问题。

以下是生成的文件 ui_mainwindow.h 的示例:

/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created: Wed Jul 10 15:48:32 2013
**      by: Qt User Interface Compiler version 4.8.4
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(400, 300);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        MainWindow->addToolBar(mainToolBar);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        // !!!!! NOTE !!!!! setCentralWidget gets called
        MainWindow->setCentralWidget(centralWidget);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

我还在上一篇文章中谈到了如何使用 Layouts:

在没有布局的情况下将 QRadioButton 添加到 QWidget

希望有帮助。

于 2013-07-10T22:57:16.453 回答