我从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的按钮部分?
答案 0 :(得分:2)
QMainWindow和QPushButton都来自QWidget,一般来说,QWidgets可以独立显示,所以不需要附加到父级,尽管你可能想要将你呈现的小部件分组和组织到用户。
对于初学者,我认为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 *的可选参数: - < / p>
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.
答案 1 :(得分:0)
您正在创建一个按钮和一个窗口,但您没有将它们关联在一起。因此,该按钮不是主UI的一部分。要将按钮添加到主窗口,您应添加以下行 -
mWin->setCentralWidget(button);
使用Qt创建用户界面时,最好避免显式设置几何体。 Here是一个很好的页面,用于描述Qt中的布局。
此外,您似乎缺少主要功能。
答案 2 :(得分:0)
您没有设置父子关系,您需要QPushbutton作为QMainwindow的孩子。然后你可以在QMainwindow上看到QPushbutton。
请尝试这个,我不确定你想要实现的目标......但是下面的代码会给出一些关于如何继续进行的事情......
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()
答案 3 :(得分:0)
为主窗口创建一个中央窗口小部件,然后使用布局将按钮放在中央窗口小部件上。例如:
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的一些示例,例如application example以获取更多信息。