请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体

请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体,第1张

如果说你的按钮没有显示模拍,最有可能的原因是你没有将按钮的父窗口设置成你自定义的Widget

比如说你自定义了一个 Widget,它继承自 QWidget,示意如下:

//widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include <QtGui/QWidget>

#include <QPushButton>

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = 0)

~Widget()

private:

QPushButton buttonA

QPushButton buttonB

QPushButton* pButton

}

#endif // WIDGET_H

在上面的头文件中定义了两个button以及一个指针,下面是源文件

//widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)

: QWidget(parent)

{

buttonA.setText("buttonA")

buttonB.setText("buttonB")

//在构造pButton时指定Widget为pButton的父窗口

//注铅码厅意:由于pButton继承自QObject并且你为他指定了父窗口,

//父类中的QObjetc会对pButton的内存进行管理,并在合适的时候释放内存,

//所以你不需要在Widget的析构函数中去进行delete pButton的 *** 作,

//建议使用new这种方式来构造子控件

pButton = new QPushButton(this)

pButton->setText("buttonC")

//指定Widget为buttonA和buttonB的父窗口

//如果你不指定他们的父窗口,那么这些控件将不可见

//你可以注释下两行中的某条语句,来测试控件是否可见

//目前两个控件都是可见的

buttonA.setParent(this)

buttonB.setParent(this)

/槐隐/移动控件到相应的坐标点

buttonA.move(100,100)

buttonB.move(100,150)

pButton->move(100,200)

}

Widget::~Widget()

{

}

//main.cpp

#include <QtGui/QApplication>

#include "widget.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv)

Widget w

w.show()

return a.exec()

}

这就是整个示例程序了,总的来说,要想窗体中的控件可见,你必须将该窗体设置成这些控件的父窗口。

今天根据教程-《Qt开发实例》学习遇到一个问题早饥稿,当在MainWindow类中添加qPushbutton后,按钮无法用鼠标点击,折腾了很久发现是MainWindow中private预先定义的

Ui::MainWindow *ui 的原因,它通过ui->setupUi(this) 创建了一个位于窗口顶部的栏位,且至于了窗口最顶层,导致后来创建的qPushbutton被覆盖住了,所以无法点击

若将代码作以下改动:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QPushButton>

#include <QMouseEvent>//引用鼠标类头文件

namespace Ui {

class MainWindow

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0)

~MainWindow()

private:

// Ui::MainWindow *ui

QPushButton *btClose

}

#endif // MAINWINDOW_H

--------------------mainwindow.h

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent)

// ui(new Ui::MainWindow)

{

// ui->setupUi(this)

btClose = new QPushButton(this)

btClose->setText("关陆孝闭")

}

MainWindow::~MainWindow()

{

// delete ui

}

-----------------------------mainwindow.cpp

那按钮就可以起作用了肢银


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12195890.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存