我只是在盯着Qt,所以希望这是一个菜鸟问题。在Qt Creator 2.7.2,Qt 5,标准桌面应用程序中工作。
目前我的应用程序是一个窗口,主窗口完全由控制台对象占用,只是一个纯文本编辑,如下所示:
setCentralWidget(console);
当然占用了整个窗口。所以我使用UI编辑器frame_2添加了一个框架。如何让控制台出现在框架内,而不是占据整个窗口?
答案 0 :(得分: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:
Add QRadioButton into QWidget without layout
希望有所帮助。