我是从Qt开始的,我不明白什么。这是我的代码:
#include <QApplication>
#include <QtWebKitWidgets/QWebView>
#include <QMainWindow>
#include <QPushButton>
QApplication a(argc, argv);
QMainWindow *mWin = new QMainWindow();
QPushButton *button = new QPushButton("Button");
button->setGeometry(0,0,128,56);
button->show();
mWin->setGeometry(QRect(300,300,1024,640));
mWin->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
mWin->show();
return a.exec();当我启动程序时,它会按下按钮,而不是在主GUI上。相反,它是在我的苏格兰威士忌的左上角。如何使按钮成为主GUI的一部分?
发布于 2013-08-21 08:09:35
QMainWindow和QPushButton都来自于QWidget,通常情况下,QWidgets可以独立地显示自己,因此不需要附加到父服务器上,尽管您很可能希望对您呈现给用户的小部件进行分组和组织。
对于初学者来说,我认为QMainWindow有点误导,因为您实际上并不需要它来显示小部件。例如,如果您只想显示按钮,只需创建QPushButton和调用显示:-
QPushButton pButton = new QPushButton("Test");
pButton->show();虽然你很少会真的想这么做。实际上,尽管它看起来毫无意义,但您甚至可以创建一个QWidget并显示:-
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.show();
return a.exec();
}现在,QWidget可以成为所有其他小部件的父部件,但不需要定义QMainWindow。
您可能希望显示其他小部件,Qt使用父/子层次结构系统将它们连接在一起。除其他外,这里的一个优点是您不需要跟踪不同的小部件就可以释放它们的内存。完成后,只需删除顶层项(可能是QMainWidget )、QDialog或其他基于QWidget的对象。在Windows的情况下,您所需要做的就是关闭它们,并且它们的孩子也会被清理干净。
可以通过不同的方式向QMainWindow添加小部件,这取决于您想要实现什么。最终,您可能希望使用允许按逻辑安排对小部件分组的布局,但首先,如果您查看QPushButton的构造函数,您将看到它接受了QWidget*:-的一个可选参数。
QPushButton(QWidget * parent = 0)这允许您将正在创建的小部件(在本例中为QPushButton)附加到父部件。因此,创建QMainWindow,然后传递指向QPushButton的指针。
QMainWindow* pWindow = new QMainWindow; // create the main window
QPushButton pButton = new QPushButton(pWindow); // create the push button
pWindow->show(); // Display the main window and its children.发布于 2013-08-21 05:03:33
你正在创建一个按钮和一个窗口,但是你没有把它们联系在一起。因此,该按钮不是主UI的一部分。为了将按钮添加到主窗口,您应该添加以下行-
mWin->setCentralWidget(button);当使用Qt创建用户界面时,最好避免显式地设置几何图形。这里是一个很好的页面,它描述了Qt中的布局。
而且,你似乎缺少了一个主要功能。
发布于 2013-08-21 05:06:55
为主窗口创建一个中央小部件,然后使用布局在中央小部件上放置按钮。例如:
QMainWindow *mWin = new QMainWindow();
// Place the button in a layout
QHBoxLayout *layout = new QHBoxLayout;
QPushButton *button = new QPushButton("Button");
layout->addWidget(button);
// Set up a central widget for the main window
QWidget *centralWidget = new QWidget();
centralWidget->setLayout(layout);
mWin->setCentralWidget(centralWidget);如果您已经以这种方式将按钮放置到布局中(或者像其他答案中指出的那样,作为中央小部件本身),则不需要在按钮上设置几何图形,也不需要显式地调用按钮上的setVisible或show (但仍然需要在主窗口上)。
考虑查看Qt的一些示例,如应用实例以获得更多信息。
https://stackoverflow.com/questions/18349074
复制相似问题