我从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上。相反,它出现在我scoeen的左上角。如何使按钮成为主GUI的一部分?
QMainWindow和QPushButton都源于QWidget,通常,QWidget可以独立显示,因此不需要附加到父级,尽管您可能希望对呈现给用户的小部件进行分组和组织。
对于初学者来说,我认为QMainWindow有点误导,因为您实际上并不需要它来显示小部件。例如,如果你只想显示按钮,你只需要创建QPushButton并调用show:-
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.
您正在创建一个按钮和一个窗口,但没有将它们关联在一起。因此,该按钮不是主UI的一部分。为了将按钮添加到主窗口,您应该添加以下行-
mWin->setCentralWidget(button);
使用Qt创建用户界面时,最好避免显式设置几何图形。这是一个很好的页面,描述了在Qt的布局。
此外,您似乎缺少一个主要功能。
您没有设置父子关系,您需要QPushbutton作为QMainwindow的子级。然后您可以在Q主窗口上看到Q按钮。
请试试这个,我不确定你到底想得到什么。。但下面的代码将给出一些关于如何进行的提示。。
QApplication a(argc, argv);
QMainWindow *mWin = new QMainWindow();
QPushButton *button = new QPushButton(mWin); // setting parent as QMainwindow
button->setGeometry(0,0,128,56);
// button->show();
//mWin->setCentralWidget( button );
mWin->setGeometry(QRect(300,300,1024,640));
mWin->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
mWin->show()
为主窗口创建一个中心小部件,然后使用布局将按钮放置在中心小部件上。例如:
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的一些示例,例如应用程序示例,以获取更多信息。