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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体相关的知识,希望对你有一定的参考价值。

我很郁闷的是有时一些程序会正常显示出来有时却不行,这些程序还是按照教材中的例子打的,唉,先谢谢了

如果说你的按钮没有显示,最有可能的原因是你没有将按钮的父窗口设置成你自定义的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();


这就是整个示例程序了,总的来说,要想窗体中的控件可见,你必须将该窗体设置成这些控件的父窗口。
参考技术A 楼上你这样的方法对于QT编程是多余的。这是在MFC里面才用的方法。
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
QT有他自己的布局管理器。你可以不用在意他的坐标,但他可以帮你显示出最好的位置。
比如我接楼上的例子。虽然楼上让按钮显示出来了。但是楼主你其实没有把你的按钮添加到一个布局里去。这样你也可以不用指定父对象,QT会自动生成父子关系!

QVBoxLayout* mainLayout=new QVBoxLayout;\\创建一个竖排的布局
mainLayout->addWidget(&buttonA);
mainLayout->addWidget(&buttonB);
mainLayout->addWidget(pbutton);
setLayout(mainLayout);
这样就可见了

请问qt中如何获取textEdit中内容?

ui->textEdit->toPlainText()中的ui是指什么?
1.如何显示?
2.如何写入文件?

ui是头文件中的引入的.ui文件中窗口类
比如你用Qt Designer设计一个窗口dialog.ui文件,这个dialog设置类名为dialog
那么在头文件代码中可以引入 dialog *ui;
然后在构造函数中有setup(ui),会把窗口装载进来
在设计的dialog.ui中一个textEdit,就可以通过ui->textEdit来访问这个文本编辑框

不知道我的回答对你是否有用,你可以创建一个最简单的窗口模板程序来分析代码
参考技术A ui是头文件中的引入的.ui文件中窗口类
比如你用Qt Designer设计一个窗口dialog.ui文件,这个dialog设置类名为dialog
那么在头文件代码中可以引入 dialog *ui;
然后在构造函数中有setup(ui),会把窗口装载进来
在设计的dialog.ui中一个textEdit,就可以通过ui->textEdit来访问这个文本编辑框

不知道我的回答对你是否有用,你可以创建一个最简单的窗口模板程序来分析代码.
参考技术B QString str= ui->textEdit->test(); 什么显示?什么写入文件?你说清楚点。

以上是关于请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体的主要内容,如果未能解决你的问题,请参考以下文章

Qt中如何添加并调用别人在VC6.0写的的类文件?

如何将在VC6.0下编写的类文件添加到QT工程里使用?

请问怎么查看QT自带函数,QT里那些像close的函数怎么查看原代码?

Qt编程问题.

谁能说一下在Qt中使用多线程都有哪些需要注意的事项呢?

Qt/VTK:没有合适的默认构造函数可用(自定义交互器)