Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QPushButton主Gui_Qt_Qwidget_Qmainwindow_Qpushbutton - Fatal编程技术网

Qt QPushButton主Gui

Qt QPushButton主Gui,qt,qwidget,qmainwindow,qpushbutton,Qt,Qwidget,Qmainwindow,Qpushbutton,我是从Qt开始的,我不懂一些东西。这是我的密码: #include <QApplication> #include <QtWebKitWidgets/QWebView> #include <QMainWindow> #include <QPushButton> QApplication a(argc, argv); QMainWindow *mWin = new QMainWindow(); QPushButton *bu

我是从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();
#包括
#包括
#包括
#包括
质量保证申请a(argc、argv);
QMainWindow*mWin=新的QMainWindow();
QPushButton*按钮=新的QPushButton(“按钮”);
按钮->设置几何体(0,0128,56);
按钮->显示();
mWin->setGeometry(QRect(3003001024640));
mWin->setWindowFlags(Qt::CustomizeWindowint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
mWin->show();
返回a.exec();

当我启动程序时,它会生成一个按钮,但不会在主GUI上。而是放在我的烤饼的左上角。如何使按钮成为主GUI的一部分?

您正在创建一个按钮和一个窗口,但没有将它们关联在一起。因此,该按钮不是主UI的一部分。为了将按钮添加到主窗口,您应该添加以下行-

mWin->setCentralWidget(button);
使用Qt创建用户界面时,最好避免显式设置几何体。是一个很好的页面,它描述了Qt中的布局


另外,您似乎缺少一个主函数。

您没有设置父子关系,您需要QPushbutton作为QMainwindow的子函数。然后您可以在Qmain窗口上看到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()

)

为主窗口创建一个中心小部件,然后使用布局将按钮放置在中心小部件上。例如:

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的一些示例,例如,以获取更多信息。

QMainWindow和QPushButton都源于QWidget,通常,QWidget可以独立显示,因此不需要附加到父对象,尽管您可能希望对呈现给用户的小部件进行分组和组织

对于初学者来说,我认为QMainWindow有点误导,因为您实际上不需要它来显示小部件。例如,如果只想显示按钮,则只需创建QPushButton和call 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现在可以是所有其他Widget的父窗口,而无需定义QMainWindow

您可能希望显示其他小部件,而Qt使用父/子层次结构系统将它们链接在一起。除此之外,这里的一个优点是,您不需要跟踪不同的小部件来释放它们的内存。完成后,只需删除顶级项,它可能是QMainWidget、QDialog或其他基于QWidget的对象。就窗户而言,你所需要做的就是把它们关上,他们的孩子也会被清理干净

将小部件添加到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.