QPushButton Main Gui

时间:2013-08-21 04:50:12

标签: qt qwidget qmainwindow qpushbutton

我从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的按钮部分?

4 个答案:

答案 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);

如果您已经按照这种方式将按钮放置到布局中(或者作为中心窗口小部件,就像其他答案之一所示),您不需要在按钮上设置几何图形,也不需要明确地在按钮上调用setVisibleshow(但您仍然需要在主窗口上)。

考虑查看Qt的一些示例,例如application example以获取更多信息。